簡體   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