@defi-wonderland/foundry-mock-generator
v1.0.2
Published
A mock contract generator for Foundry
Downloads
9
Keywords
Readme
Foundry Mock Generator is the solidity mocking library. It's a plugin for foundry that can be used to create mock Solidity contracts able to mock variables and external calls.
Features
- Get rid of your folder of "mock" contracts and just use foundry.
- Keep your tests simple with a easy mock functions.
- Mock up external calls and variables in a beautiful and orderly fashion.
Installation
You can install the tool via yarn:
yarn add foundry-mock-generator@<latest-canary>
Basic Usage
To generate the mock contracts all you have to do is run:
yarn foundry-mock-generator --contracts <path/to/contracts> --out <path/to/foundry/out> --genDir <path/to/generate/contracts>
Note: --contracts required by the user, tha path to the solidity contracts to mock
Note: --genDir default path is solidity/test/mock-contracts
, the path to generate the mock contracts
Note: --out default path is out
, the path that has foundry's compiled artifacts
- To use the mock contracts in your tests just import them
import { MockMyContractName } from '/path/to/mock-contracts/MockMyContractName.sol'
- Create the mock contract and allow cheatcodes for it
/// Deploy mock contract
mock_myContract = new MockMyContractname(...);
/// Allow mocks for the contract
vm.allowCheatcodes(address(mock_myContract));
- Enjoy of easy mock calls
/// Mock myFuncName function, when called with `arg1`, `arg2` to return `return1`
mock_myContract.mock_call_myFuncName(arg1, arg2, return1);
/// Mock myVarName variable, to return `return1`
mock_myContract.mock_call_myVarName(return1);
- You also can change value of any variable (except of
private
)
/// Change value of a variable
mock_myContract.set_myVarName(value);
- Please, note that if you want to mock
internal
functions, you must make themvirtual
. The tool will not generate mocks for internal functions that are not virtual.
Release
We use changesets to mark packages for new releases. When merging commits to the dev branch you MUST include a changeset file if your change would require that a new version of a package be released.
To add a changeset, run the command yarn changeset
in the root of this repo. You will be presented with a small prompt to select the packages to be released, the scope of the release (major, minor, or patch), and the reason for the release. Comments within changeset files will be automatically included in the changelog of the package.
Contributors
Maintained with love by Wonderland. Made possible by viewers like you.