В настоящее время я изучаю Solidity и пытаюсь создать простой контракт. Я также пытаюсь использовать платформу Mocha для тестирования смарт-контракта перед развертыванием. Код теста приведен ниже:
const assert = require("assert");
const ganache = require("ganache-cli");
const Web3 = require("web3");
const { interface, bytecode } = require("../compile");
const provider = ganache.provider();
const web3 = new Web3(provider);
let accounts;
let inbox;
beforeEach(async () => {
// Get a list of all accounts
accounts = await web3.eth.getAccounts();
// Use one of those accounts to deploy the contract
inbox = await new web3.eth.Contract(JSON.parse(interface))
.deploy({
data: bytecode,
arguments: ["Hi there!"]
})
.send({
from: accounts[0],
gas: "1000000"
});
});
describe("Inbox", () => {
it("deploys a contract", () => {
console.info(inbox);
});
});
Тест не пройден и тайм-ауты:
> mocha
Inbox
1) "before each" hook for "deploys a contract"
0 passing (2s)
1 failing
1) "before each" hook for "deploys a contract":
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
Я заметил, что тест проходит, если я закомментирую аргумент send():
// .send({
// from: accounts[0],
// gas: "1000000"
// });
Таким образом, проблема должна быть связана с использованием этого метода. Не уверен, что это проблема асинхронности.
Я решил это, понизив web3 до 1.0.0-beta.37
. Похоже, версия 1.0.0-beta.51
глючит.