Ich habe den folgenden Code in meiner testtoken.js und frage mich, warum die Behauptung mit "AssertionError: Allowance wasn't set to 30: Expected '0' to equal 30" fehlschlägt.
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");
});
});
Dies gibt auch 0 von der Befehlszeile zurück:
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])});
Es scheint, als ob der Zustand nach der Genehmigung nicht beibehalten wird?
EDIT : Mein fester Testfall:
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");
})
});
})
Wenn sich der Vertrag, den Sie testen, auf einer echten Blockchain (Ropsten, Rinkeby usw.) und nicht auf einer Test-Blockchain wie Ganache befindet, ist es mehr als wahrscheinlich, dass Sie nicht darauf warten, dass die Transaktion abgebaut wird. Sie überprüfen sofort nach dem Absenden der Transaktion die Kontodeckung. Sie müssen warten, bis die Transaktion abgebaut ist, bevor Sie sie überprüfen.
Es ist auch möglich, eine Sprache wie golang zu verwenden, um ausstehende Zustandsdaten zu überprüfen. In diesem Fall würde dies funktionieren, aber ich bin mir nicht sicher, ob web3j etwas Ähnliches hat oder nicht.
Da Sie Ihre Tests mit Trüffeln durchführen, besteht die Möglichkeit, dass diese Trüffel den aktuellen Block noch nicht abgebaut hat, wenn Sie Ihren Aufruf für die neu aktualisierte Genehmigung einreichen. Versuchen Sie, eine Ruhezeit von 1 Sekunde hinzuzufügen, nachdem Sie die Aktualisierung des Freibetrags gesendet haben, bevor Sie den neuen Freibetrag überprüfen.
allowance
bereits getätigt worden sein und den alten Wert zurückgeben
Ismael
tt.approve(accounts[1], 30).then(() => tt.allowance.call(accounts[0], accounts[1]); ).then(allowance => console.log(allowance.toNumber()))
.Jonathan Scialpi
Nagibaba
GetBlock
mitMoralis
und arbeitete