我正在使用Mocha模块编写Solidity的一些测试。尽管调用了done()函数并解决了promise,但测试失败并出现了以下错误(注解掉的console.log()语句显示包含的模块compile.js中的Promise确实解决了)。也许我没有正确解释错误?我是Node.js的新手,所以如果我弄得一团糟,我很抱歉。
1.“部署合同”的“before each”钩子:
错误:超时超过2000 ms。对于异步测试和钩子,请确保调用了“done()”;如果返回承诺,确保其得到解决。
const assert = require('assert');
const ganache = require('ganache-cli');
const Web3 = require('web3');
const web3 = new Web3(ganache.provider());
let accounts;
let inbox;
beforeEach(async (done) => {
// Get a list of all accounts
accounts = await web3.eth.getAccounts();
// console.log(accounts);
const generate = require('../compile');
await generate()
.then(async data => {
var interface = data.interface;
var bytecode = data.bytecode;
// console.log('ABI ' + interface);
// console.log('BIN ' + bytecode);
inbox = await new web3.eth.Contract(JSON.parse(interface))
.deploy({data: bytecode, arguments: ['Greetings!']})
.send({from: accounts[0], gas: '1000000'});
});
done();
});
describe('Inbox testing', () => {
it('Deploy a contract', () => {
console.log('Contract ' + inbox);
});
});
从compile.js导入的函数generate()返回promise
function generate() {
return new Promise((resolve, reject) => {
...
})
})
}
module.exports = generate;
2条答案
按热度按时间c9qzyr3d1#
在Mocha中,不能将
done
回调函数与异步函数一起使用。另外,将异步函数传递给.then
也不是一个好主意。我将重构测试函数以仅使用异步样式代码。ggazkfy82#
我认为
mocha
可能会发疯,因为您需要在运行测试后手动关闭web3
连接。请尝试在运行测试后调用disconnect
: