繁体   English   中英

如何用 hardhat 测试 solidity payable function

[英]How to test a solidity payable function with hardhat

我有以下智能合约 function:

 function safeMint(address to, uint256 tokenId) public onlyOwner payable {
    require(msg.value >= mintPrice, "Not enough ETH to purchase NFT; check price!"); 
    _safeMint(to, tokenId);
}

和以下测试 function in chai 来测试它。

describe("mint", () => {
  it("should return true when 0.5 ethers are sent with transaction", async function () {
    await contract.deployed();
    const cost = ethers.utils.parseEther("0.1");
    await contract.safeMint("0x65.....",1,cost
  }); 

然而,测试 function 不起作用,并给我一个成本错误。 错误:“'BigNumber' 类型与'Overrides & { from?: PromiseOrValue; }' 类型没有共同的属性。” 我不明白错误在哪里。

试试这个,这是通过调用发送值的有效语法:

await contract.safeMint("0x65.....", 1, {value: cost});

我在测试应付账款 function 时遇到了类似的问题,它一直说“对象不是 BigInt 的实例”。 我如何解决这个问题并确保测试顺利进行的方法是测试接收方的余额(在您的情况下为“收件人”地址),以确保余额已更新。 也就是说,如果 safeMint function 在测试期间成功,则“to”地址应增加 1。您可以通过以下方式进行测试:const balOfToAdress = await contract.balanceOf(to.address) expect(balOfToAddress).to.equal(1) )

注意:上面的 'expect' 是通过在代码顶部要求 chai 获得的,即 const {expect} = require('chai') 并且,你必须专门测试'to'地址的余额(在这里,我只是假设“收件人”地址上的铸币初始余额为 0)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM