Gas
msg.sender.call{value: 0.1 ether, gas: 1}(’’): 為什麼它沒有失敗?不應該嗎?
我正在做一個簡單的測試來強制恢復交易,但它並沒有發生。
我有這個功能,我打算將其限制
gas
為 1。contract MyContract { constructor() payable {} function pleaseFail(uint256 _guess) public { (bool sent, ) = msg.sender.call{value: 0.1 ether, gas: 1}(""); require(sent, "Failed do send ether"); } }
我有一個盡可能簡單的測試:
describe("Test fail", function () { it("Should fail", async function () { const FF = await ethers.getContractFactory("MyContract"); const _f = await ff.deploy({ value: utils.parseEther("0.1") }); await _f.deployed(); _f.pleaseFail(7); } }
但是,當我執行命令行時,它並沒有失敗。我錯過了什麼?這是安全帽的某種預期行為嗎?
npx hardhat test test/myFailure.ts
請發送比乙太稍大的值
0.1
,並且您也有ff.deploy
它應該在的位置FF.deploy
,請使用斷言語句以確保它的行為符合您的意願。
it("Should fail", async function () { const FF = await ethers.getContractFactory("MyContract"); const _f = await FF.deploy({ value: utils.parseEther("0.1") }); await _f.deployed(); await _f.pleaseFail(7); /*await expect(_f.pleaseFail(7)).revertWith('Failed do send ether')*/ }