【发布时间】:2015-08-11 20:39:04
【问题描述】:
我想为异步进程创建一个单元测试。我已经创建了一个简单的模拟情况,使用超时来延迟警报。 (真正的过程是动态加载 JS 文件)。
我只是从 Mocha、Chai 和 Sinon 开始。我在我的 HTML 文件旁边创建了一个名为 vendor 的文件夹。其中包含最新版本的 mocha.css、mocha.js、chai.js 和 sinon.js。
如果我注释掉 setTimeout() 调用,下面的代码可以正常工作。我应该如何更改它,以便 sinon.assert... 调用将等待延迟操作发生?
<!DOCTYPE html>
<head>
<title>Delayed alert test</title>
</head>
<body>
<div id="mocha"><p><a href=".">Index</a></p></div>
<div id="messages"></div>
<div id="fixtures"></div>
<link rel="stylesheet" type="text/css" href="vendor/mocha.css" />
<script src="vendor/mocha.js"></script>
<script src="vendor/chai.js"></script>
<script src="vendor/sinon.js"></script>
<script>
mocha.setup('bdd')
var spy = sinon.spy(window, 'alert')
describe("Test", function() {
describe("#alert", function() {
it("should show an alert", function(done) {
this.timeout(5000)
setTimeout(function () { // Works if these 2 lines...
alert ("Once")
alert ("Twice")
}, 2000) // are commented out
sinon.assert.called(spy)
sinon.assert.calledTwice(spy)
sinon.assert.calledWithExactly(spy, "Once")
sinon.assert.calledWithExactly(spy, "Twice")
done()
});
});
})
mocha.run();
</script>
</body>
</html>
【问题讨论】:
标签: unit-testing mocha.js chai