Ich habe einen .sol-Vertrag:
contract HelloWorld {
string name="TEST";
uint number;
function HelloWorld() {
}
function getName() returns (string) {
return name;
}
function getNumber() returns (uint) {
return number;
}
function setNumber(uint _number) {
number = _number;
}
}
Und ich versuche, einen Test in Javascript zu schreiben, um die Funktion setNumber aufzurufen. Meine test.js sieht so aus:
var HelloWorld = artifacts.require('./HelloWorld.sol');
contract("HelloWorld:getName", function(accounts) {
it("should assert true", async function() {
const contract = await HelloWorld.deployed();
await contract.setNumber(54);
await contract.getNumber();
const result = await contract.getNumber.call();
assert.isTrue(result === 54);
});
});
Aber ich bekomme folgenden Fehler:
Contract: HelloWorld:getName
1) should assert true
> No events were emitted
0 passing (241ms)
1 failing
1) Contract: HelloWorld:getName should assert true:
AssertionError: expected false to be true
Kann mir jemand bei der Syntax helfen? Oder mir die Richtung zum Lernen zeigen?
Vielen Dank im Voraus..
Der Identitätsoperator ( ===
) verhält sich genauso wie der Gleichheitsoperator ( ==
), außer dass keine Typkonvertierung erfolgt und die Typen gleich sein müssen, um als gleich angesehen zu werden.
Und da der Typ von result
ist BigNumber
, wird der Ausdruck result === 54
zu ausgewertet false
.
Das musst du also ändern:
assert(result === 54);
Entweder dazu:
assert(result == 54);
Oder dazu:
assert(result.equals(54));
Persönlich bevorzuge ich letzteres, weil ich der impliziten Konvertierung innerhalb der BigNumber.equals
Funktion besser "vertraue" als dem, was im ==
Operator implementiert ist (da es mehrere Möglichkeiten gibt, die beiden an übergebenen Argumente zu behandeln ==
, aber es gibt nur eine plausible Möglichkeit, das Argument zu behandeln übergeben an BigNumber.equals
).
Hier finden Sie alles, was Sie wissen müssen BigNumber
...
=
aus entfernen await =
. Schreiben Sie es direktawait contract.setNumber(54)
result
von
Ismael