Solidity
Solidity 合約函式無法使用 Truffle 正確返回,但正在使用 Remix
我正在使用 Truffle 測試我的合約,但我的函式沒有返回正確的 uint,儘管在 Remix 中測試時這樣做了。這是我的 Test.js 程式碼:
var EventContract = artifacts.require("./EventContract.sol"); contract ('EventContract', function (accounts){ it("account1 purchases 4 tickets from ticketContract, which had 10 tickets to start with at a cost of 2", function(){ var event; var account1 = accounts[0]; return EventContract.deployed() .then(function(instance){ event = instance; return event.buyTicketsFromContract.call(account1, 2, {from: account1, value: 4}); }) .then (function (success){ console.log("purchased from contract with success: " + success); assert.equal(true, success, "bought 2 tickets for 4 ether"); return event.getContractTicketBalance.call(); }) .then (function(contractBalance){ console.log(contractBalance.toNumber()); // Fails here assert.equal(8, contractBalance.toNumber(), "contract ticket balance is not 8"); return event.getTicketBalance.call(account1); }) .then (function(accountBalance){ assert.equal(2, accountBalance.toNumber(), "account balance is not 2"); }) ; }) ;
失敗是因為合約票據余額是 10(初始金額),而不是 8。在 Remix 上使用相同的函式時,返回的值是正確的。
.call()
從這一行刪除:return event.buyTicketsFromContract.call(account1, 2, {from: account1, value: 4});
當您說 時
call()
,您明確表示這是一個只讀請求,因此甚至不要嘗試更新區塊鏈。因此,當您檢查發生了什麼時,您會發現什麼都沒有發生。希望能幫助到你。