Ich habe eine Funktion auf einen Soliditätsvertrag, der einen Wurf macht. Z.B.Was ist das Muster für die Handhabung werfen auf einen Soliditätsvertrag in Tests
function do(x,y) {
if (msg.sender != owner)
throw;
// ...
}
In der Trüffel Umgebung habe ich einen etwas js Test wie:
//.... part of a promise chain
.then(
function (_bool0) {
assert.isTrue(_bool0,"whoops - should be true");
return contract.do("okdoke" , {from: accounts[1]});
}).then(
function (tx_id) {
//..
done();
}
// ...
Die Rückkehr contract.do() bewirkt, dass die Bedingung, die in dem Wurf führt. Welche produziert die folgenden in der Trüffel Test Ausgang für diesen Test:
Error: VM Exception while executing transaction: invalid JUMP
Was ist das Idiom einen Wurf aus einem Vertrag Funktion in einem Test, wie dies für den Umgang mit? Der Wurf ist das richtige Verhalten.
Caveat für niemanden zu sehen nach dem „prüfen, ob alle Gas verwendet wird“ Ansatz: Das wird sich ändern in der Zukunft, da throw zugunsten von "revert()" veraltet ist. Revert() verbraucht NICHT das gesamte Gas, sondern nur das Gas, das bis zu dem Punkt verbraucht wurde, an dem revert() aufgerufen wurde. – TripleSpeeder
Dieses Problem verursacht immer noch Probleme, besonders da ich revert() verwende. Ich konnte auf TestRPC nach Fehlern suchen, aber jetzt, da ich im Rinkeby-Test bin, kehren Netzwerktransaktionen zurück, als wären sie erfolgreich. irgendwelche Updates auf deiner Seite? – okwme