Tengo el siguiente código en mi testtoken.js y me pregunto por qué la afirmación falla con "AssertionError: la asignación no se estableció en 30: se esperaba que '0' fuera igual a 30".
it("Approve an allowance of 30 between act0 and act1", function() {
return TestToken.deployed().then(function(instance) {
tt = instance;
tt.approve.call(accounts[1], 30);
return tt.allowance.call(accounts[0], accounts[1])
}).then(function(allowance) {
assert.equal(allowance.valueOf(), 30, "allowance wasn't set to 30");
});
});
Esto también devuelve 0 desde la línea de comando:
TestToken.deployed().then(function(instance){tt = instance;tt.approve.call(web3.eth.accounts[1], 30);return tt.allowance.call(web3.eth.accounts[0], web3.eth.accounts[1])});
¿Parece que el estado no se mantiene después de la aprobación?
EDITAR : Mi caso de prueba fijo:
it("Approve an allowance of 30 between act0 and act1", function() {
return TestToken.deployed().then(function(instance){
tt = instance;
tt.approve(web3.eth.accounts[1], 30);
return tt.allowance.call(web3.eth.accounts[0], web3.eth.accounts[1]).then(function(allowance){
assert.equal(allowance.valueOf(), 30, "allowance wasn't set to 30");
})
});
})
Si el contrato que está probando está en una cadena de bloques real (ropsten, rinkeby, etc.) y no en una cadena de bloques de prueba como Ganache, es muy probable que no esté esperando a que se extraiga la transacción. Inmediatamente verifica la asignación de la cuenta después de enviar la transacción. Deberá esperar a que se extraiga la transacción antes de verificar.
También es posible usar un lenguaje como golang para verificar los datos de estado pendientes, en cuyo caso esto funcionaría, sin embargo, no estoy seguro de si web3j tiene o no algo similar a esto.
Dado que está ejecutando sus pruebas en trufas, existe la posibilidad de que cuando envíe su llamada para la asignación recientemente actualizada, esa trufa no haya terminado de extraer el bloque actual. Intente agregar un tiempo de sueño de 1 segundo después de enviar la actualización de la asignación, antes de verificar la nueva asignación.
allowance
ya podría haberse realizado, devolviendo el valor anterior
ismael
tt.approve(accounts[1], 30).then(() => tt.allowance.call(accounts[0], accounts[1]); ).then(allowance => console.log(allowance.toNumber()))
.Jonathan Scialpi
Nagibaba
GetBlock
conMoralis
y trabajé