Solidity
Chai 期望在鏈上執行時不會恢復
我目前正在為我的契約編寫一些測試,以確保在契約中恢復自定義錯誤。例子:
function fund(address sender, uint256 amount) public { if (amount <= 0) { revert FundMe__FundAmountMustBeAboveZero(); } doOtherStuff(); }
所以在我的測試中,我有以下程式碼:
it("fails when you fund 0 tokens", async function () { await expect(fundMe.fund(deployer.address, 0)).to.be.revertedWith( "FundAmountMustBeAboveZero" ) })
顯然給定程式碼,這應該被還原,但在測試中它一直告訴我交易沒有被還原。
AssertionError: Expected transaction to be reverted + expected - actual -Transaction NOT reverted. +Transaction reverted.
即使您查看 etherscan 上的交易,它也會說它在合約執行中恢復了…… https://goerli.etherscan.io/tx/0x6f757bcd1aa1aa336f1fc5a71dd05ac249e175e8ee55f179c038bd4f75e2f32a
如果這是我的程式碼中的錯誤或 chai 的一些奇怪錯誤,不確定該怎麼做?
看起來很奇怪,但請使用Hardhat console.log並檢查
amount
. 旁邊 - 你需要使用(...).to.be.revertedWithCustomError(fundMe, "FundMe__FundAmountMustBeAboveZero");
to.be.revertedWith 與自定義錯誤的名稱不匹配。
嘗試改變這個
await expect(fundMe.fund(deployer.address, 0)).to.be.revertedWith( "FundAmountMustBeAboveZero" )
至
await expect(fundMe.fund(deployer.address, 0)).to.be.revertedWithCustomError ( "FundMe__FundAmountMustBeAboveZero" )