Las funciones del contrato de solidez no regresan correctamente con Truffle, pero funcionan en Remix

Estoy probando mis contratos usando Truffle, pero mis funciones no devuelven el uint correcto, a pesar de hacerlo cuando se prueba en Remix. Este es mi código 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");
    })
    ;
  })
  ;

Falla porque el saldo del ticket del contrato es 10 (cantidad inicial), no 8. Al usar las mismas funciones en Remix, los valores devueltos son correctos.

Respuestas (1)

Suelta .call()de esta línea:return event.buyTicketsFromContract.call(account1, 2, {from: account1, value: 4});

Cuando dice call(), está diciendo explícitamente que esta es una solicitud de solo lectura, así que ni siquiera intente actualizar la cadena de bloques. En consecuencia, cuando revisas lo que pasó, encuentras que no pasó nada.

Espero eso ayude.