Trüffeltest javascript

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..

Es ist besser, eine neue Frage zu erstellen, wenn Sie neue Probleme haben. Da Sie Ihre ursprüngliche Frage entfernt haben, scheinen einige Antworten jetzt keinen Bezug mehr zu haben.

Antworten (2)

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 resultist BigNumber, wird der Ausdruck result === 54zu 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.equalsFunktion 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...

Vielen Dank für Ihre Antwort! Ich habe es geändert in: assert.equal(result, 54) und es hat funktioniert!

=aus entfernen await =. Schreiben Sie es direktawait contract.setNumber(54)

Danke, aber ich erhalte immer noch eine Fehlermeldung: Vertrag: HelloWorld:getName 1) sollte wahr bestätigen > Es wurden keine Ereignisse ausgegeben 0 bestanden (164 ms) 1 fehlgeschlagen 1) Vertrag: HelloWorld:getName sollte wahr behaupten: AssertionError: erwartet, dass falsch wahr ist
was ist der wert resultvon
es sollte gleich 54 sein, aber wie sehe ich, was der Wert ist?