To run the unit tests suite (in Javascript), you'll need to deploy the contracts to a local blockchain first:
yarn chain --network hardhat
then run the following:
yarn test
It might happens that Hardhat cannot resolve custom error (test failing on "Expecter nameOfTheError() but reverted without a reason string"), just restart yarn chain.
End-to-end tests have been written in Solidity, using Foundry.
To get set up:
-
Install Foundry.
-
Install external lib(s)
git submodule update --init
- Run tests:
forge test
- Update Foundry periodically:
foundryup
Resources:
To check current unit tests coverage:
node --require esm ./node_modules/.bin/hardhat coverage --network hardhat
A few notes:
- Hardhat doesn't support esm yet, hence running manually with node.
- We are currently using a forked version of solidity-coverage that includes optimizer settings. Ideally we will move to the maintained version after this is fixed on their end.
Juicebox uses the Hardhat Deploy plugin to deploy contracts to a given network. But before using it, you must create a ./mnemonic.txt
file containing the mnemonic phrase of the wallet used to deploy. You can generate a new mnemonic using this tool. Generate a mnemonic at your own risk.
Then, to execute the ./deploy/deploy.js
script, run the following:
npx hardhat deploy --network $network
Contract artifacts will be outputted to ./deployments/$network/**
and should be checked in to the repo.
To verify the contracts on Etherscan, make sure you have an ETHERSCAN_API_KEY
set in your ./.env
file. Then run the following:
npx hardhat --network $network etherscan-verify
This will verify all of the deployed contracts in ./deployments
.