JavaScript-тест на трюфель

У меня есть контракт .sol:

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;
    }
}

И я пытаюсь написать тест на javascript для вызова функции setNumber. Мой test.js выглядит так:

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);


  });
});

Но я получаю следующую ошибку:

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

Может ли кто-нибудь помочь мне с синтаксисом? Или указать мне направление для обучения?

Заранее спасибо..

Если у вас новые проблемы, лучше создать новый вопрос. Поскольку вы удалили свой исходный вопрос, некоторые ответы теперь кажутся несвязанными.

Ответы (2)

Оператор тождества ( ===) ведет себя идентично оператору равенства ( ==), за исключением того, что преобразование типов не выполняется, и типы должны быть одинаковыми, чтобы считаться равными.

А поскольку типом resultявляется BigNumber, выражение result === 54оценивается как false.

Итак, вам нужно изменить это:

assert(result === 54);

Либо к этому:

assert(result == 54);

Или к этому:

assert(result.equals(54));

Лично я предпочитаю последнее, потому что я "доверяю" неявному преобразованию внутри BigNumber.equalsфункции лучше, чем тому, что реализовано в ==операторе (поскольку существует несколько способов обработки двух аргументов, переданных в ==, но есть только один приемлемый способ обработки аргумента перешел на BigNumber.equals).

Смотрите здесь все, что вам нужно знать о BigNumber...

Спасибо за ваш ответ! Я изменил его на: assert.equal (результат, 54), и это сработало!

удалить =из await =. Пишите прямоawait contract.setNumber(54)

Спасибо, но я все еще получаю сообщение об ошибке: Контракт: HelloWorld:getName 1) должен утверждать true > Никаких событий не было отправлено 0 прохождение (164 мс) 1 сбой 1) Контракт: HelloWorld:getName должен утверждать true: AssertionError: ожидается, что false будет истинным
какова ценность result?
оно должно равняться 54, но как я узнаю, что это за значение?