Solidity

Chai 期望在鏈上執行時不會恢復

  • September 6, 2022

我目前正在為我的契約編寫一些測試,以確保在契約中恢復自定義錯誤。例子:

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"
    )

https://hardhat.org/hardhat-c​​hai-matchers/docs/reference

引用自:https://ethereum.stackexchange.com/questions/135047