第2节:单元测试
小白入门:https://github.com/dukedaily/solidity-expert ,欢迎star转发,文末加V入群。
职场进阶: https://dukeweb3.com
- 涉及到revertedWith和emit时,需要:
- 将await写在expect外面,里面不需要写await了
- .to.revertedWith,不是.be.revertedWith:
describe('Create Offer', () => {
it.only('should faild to call createOffer directly', async () => {
let last = await getOffer(lastOffer)
await expect(last.createOffer(tokens, info)).to.revertedWith("Bazaar: permission denied")
})
})
- 测试单个文件
npx hardhat test test/xxx.spec.ts
- 如果测试过程中需要改变块高
async function mineBlocks(blockNumber) {
while (blockNumber > 0) {
blockNumber--;
await hre.network.provider.request({
method: "evm_mine",
});
}
}
如果单元测时,不去执行it内部逻辑,可能是:it错误的写成了if,或者没有使用beforeEach,或者没有试用loadFixture
Sometimes when we run
test, it takes very long to execute why? (network issue, disconnect the network may work)Be sure never call any function(make any assignment) out side of beforeEach or a describe or it will fail
describe("Rivers", async function () { let accounts: SignerWithAddress[] let compIns: Comp let unitrollerIns: Unitroller let comptrollerIns: Comptroller let sPriceOracleIns: SimplePriceOracle let container: Box[] = []; // accounts = await hre.ethers.getSigners(); <-- error beforeEach(async () => { console.log("begin beforeEach"); accounts = await hre.ethers.getSigners(); console.log("accounts len: ", accounts.length); await loadFixture(deployOpenEdenFixture); }) })