Я хочу создать единичный тест для асинхронного процесса. Я создал голой макет ситуации, используя тайм-аут для задержки оповещения. (Реальный процесс будет загрузкой JS-файла на лету).Использование Mocha, Chai и Sinon для проверки действия с задержкой
Я только начинаю с Мокки, Чай и Синон. Я создал папку под названием vendor
рядом с моим HTML-файлом. Это содержит последние версии 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>
Спасибо. Если я использую ваш код, но изменяю «Один раз» на «Один» в одном месте, так что утверждение терпит неудачу, я получаю этот вывод: «Ошибка: ошибка скрипта. (: 0) at global.onerror (vendor/mocha.js: 13082: 10) '. Если я прокомментирую вызов 'setTimeout()', тогда я получаю гораздо более полный отчет, включая ожидаемые и фактические выходы, и строку, в которой было сделано неожиданное предупреждение. Есть ли способ достичь этого более полного вывода после асинхронного вызова? –
Итак, я больше использую mocha в node.js, затем ... видимо, в браузере «Ошибка скрипта». (: 0) '- то, как mocha выбрасывает асинхронные исключения, поэтому требуется немного магии try/catch для захвата исключения в' done() ' – Matt