У меня есть контракт .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
Может ли кто-нибудь помочь мне с синтаксисом? Или указать мне направление для обучения?
Заранее спасибо..
Оператор тождества ( ===
) ведет себя идентично оператору равенства ( ==
), за исключением того, что преобразование типов не выполняется, и типы должны быть одинаковыми, чтобы считаться равными.
А поскольку типом result
является BigNumber
, выражение result === 54
оценивается как false
.
Итак, вам нужно изменить это:
assert(result === 54);
Либо к этому:
assert(result == 54);
Или к этому:
assert(result.equals(54));
Лично я предпочитаю последнее, потому что я "доверяю" неявному преобразованию внутри BigNumber.equals
функции лучше, чем тому, что реализовано в ==
операторе (поскольку существует несколько способов обработки двух аргументов, переданных в ==
, но есть только один приемлемый способ обработки аргумента перешел на BigNumber.equals
).
Смотрите здесь все, что вам нужно знать о BigNumber
...
удалить =
из await =
. Пишите прямоawait contract.setNumber(54)
result
?
Исмаэль