Truffle
我如何在 Solidity 中使用 Truffle 和 payable 修飾符實際測試薄荷函式
我正在創建一個智能合約並嘗試使用 Truffle 對其進行測試。我對如何呼叫 mint 函式(如何從測試函式實際執行事務)有點困惑。我知道在我的測試中這一切都錯了,只是不確定呼叫應付函式時的語法。
function myMint(uint256 numberOfTokens) external payable nonReentrant { require(saleActive,"Nope"); require(numberOfTokens > 0, "You cannot mint 0."); require(SafeMath.add(_numMinted.current(), numberOfTokens) <= MAX_PUBLIC_MINT, "Exceeds maximum supply."); require(numberOfTokens <= MAX_PURCHASE, "Exceeds maximum number"); require(getNFTPrice(numberOfTokens) <= msg.value, "The Amount of Ether sent is not correct."); for(uint i = 0; i < numberOfTokens; i++){ uint256 tokenIndex = _tokenIdCounter.current(); _numMinted.increment(); _tokenIdCounter.increment(); _safeMint(msg.sender, tokenIndex); } }
在我的測試功能中
describe('minting', async () => { it('creates a new token', async () => { const open = await contract.startSale(); const result = await debug(contract.myMint(1)); }) })
如果您使用 web3,則需要
.call()
在方法呼叫之後添加,例如 :contract.myMint(1).call()
。如果你使用 ethersjs,你的電話很好。在所有情況下,方法呼叫都是非同步操作,您需要等待結果:
const result = await debug(await contract.myMint(1));
它失敗了,因為您沒有發送任何乙太幣並且該功能需要一些金額
require(getNFTPrice(numberOfTokens) <= msg.value, "The Amount of Ether sent is not correct.");
要發送金額,請使用值參數
contract.myMint(1, { value: web3.utils.toWei("0.01", "ether") })
。例如describe('minting', async () => { it('creates a new token', async () => { const open = await contract.startSale(); const result = await debug(contract.myMint(1, { from: "0x12341234..", value: web3.utils.toWei("0.01", "ether"), })); }) })