Sus*_*mar 4 javascript ethereum truffle
我正在为我的合同编写测试用例,并且必须延迟断言检查,因为它对时间敏感。getCompletedCampaigns() 将获得已过截止日期的活动的地址。
\n\nit("Time sensitive check", async () => {\n\n var deadLine = Math.round(Date.now() / 1000) + 3;\n let eventDetails = await contract.createCampaign("Campaign name",deadLine,\n {\n from: accounts[0]\n });\n\n addressFromEvent = eventDetails[\'logs\'][1][\'args\'][\'campaignAddress\'];\n\n async function checker() {\n let deployedCampaigns = await factory.getCompletedCampaigns();\n assert.equal(addressFromEvent, deployedCampaigns[0]);\n }\n\n function timeout(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n async function sleep() {\n await timeout(5000);\n return checker();\n }\n\n sleep();\n});\nRun Code Online (Sandbox Code Playgroud)\n\n即使断言应该失败,测试也会通过。断言发生在测试套件完成执行所有测试之后,并强制提示符从truffle develop控制台中出来,因为如果它失败了。在下面的测试中,我故意未通过测试。
Contract: Testing CrowdCoin\n \xe2\x9c\x93 CampaignFactory deployment\n \xe2\x9c\x93 Create a new Campaign (168ms)\n \xe2\x9c\x93 Get ongoing Campaigns (246ms)\n \xe2\x9c\x93 Get completed Campaigns (189ms)\n\n\n 4 passing (1s)\n\ntruffle(develop)> \n/home/vagrant/code/test/crowdcoin.test.js:82\n assert.equal(0, deployedCampaigns[1]);\n ^\nAssertionError: expected 0 to equal \'0x806ea81c279b6000b9fd9f14d2845dec87fc3544\'\n at checker (/home/vagrant/code/test/crowdcoin.test.js:82:11)\n at process._tickCallback (internal/process/next_tick.js:68:7)\nRun Code Online (Sandbox Code Playgroud)\n\n如何确保测试检查伴随时间延迟进行?
\nit("Time sensitive check", async () => {
var deadLine = Math.round(Date.now() / 1000) + 3;
let eventDetails = await contract.createCampaign("Campaign name",deadLine,
{
from: accounts[0]
});
function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
await timeout(5000);
addressFromEvent = eventDetails['logs'][1]['args']['campaignAddress'];
let deployedCampaigns = await factory.getCompletedCampaigns();
await assert.equal(addressFromEvent, deployedCampaigns[0]);
});
Run Code Online (Sandbox Code Playgroud)
通过将整个延迟逻辑移动到不同的方法以及所有前面有await的逻辑语句,除非timeout()完成,否则不会执行所述逻辑语句和测试完成。