Я тестирую свои контракты с помощью 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()
, вы явно говорите, что это запрос только для чтения, поэтому даже не пытайтесь обновить блокчейн. Следовательно, когда вы проверите, что произошло, вы обнаружите, что ничего не произошло.
Надеюсь, поможет.