Solidity

Solidity 合約函式無法使用 Truffle 正確返回,但正在使用 Remix

  • July 21, 2017

我正在使用 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(),您明確表示這是一個只讀請求,因此甚至不要嘗試更新區塊鏈。因此,當您檢查發生了什麼時,您會發現什麼都沒有發生。

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/21759