Я пишу серверное приложение с node.js и хотел бы включить модульные тесты. Одна вещь, с которой я борюсь, - это хороший способ модульного теста EventEmitter
и setInterval/setTimout
Событие, связанное с тестированием событий javascript
Какие параметры у меня есть для тестирования асинхронного сервера на стороне javascript?
Я знаю, что могу просто подключить другого слушателя к EventEmitter, который является функцией тестирования, но тогда как я могу гарантировать, что функция тестирования когда-либо запускается? часть единичного теста состоит в том, чтобы гарантировать, что каждая часть тестовых прогонов.
Я мог бы использовать setTimeout самостоятельно, но это похоже на хакерское решение.
Если это помогает, вот какой примерный код, который я пытаюсь проверить.
...
function init(param) {
...
// run update entities periodically
setInterval(this._updateEntities.bind(this, param.containerFull),
1000/param.fps);
...
}
...
EntityUpdater.prototype = {
...
"_updateEntities": function updateEntitiesfunc(fn) {
this._tickEmitter.emit(
"tick",
new dataContainer.DataContainer(this.getEntityCount())
.on(
"full", fn.bind(this)
)
);
},
...
}
...
(Испустите вызовет событие)
[Редактировать]
Я начал читать некоторые из тестов EvevntEmitter на https://github.com/ry/node/tree/master/test/simple, и это помогает мне увидеть, как идти об этом.
Вы взглянули на это сообщение в блоге? http://debuggable.com/posts/unit-testing-with-node-js:4b647d40-34e4-435a-a880-3b04cbdd56cb – Tmdean
Да, я читал блог, он полезен, но только охватывает несколько моментов. Я только что заметил, что тест не будет действовать, пока цикл не закончен. Это все еще оставляет простой одноразовый setTimeout и одноразовые события. – Raynos
Я только сейчас заметил, что выходной блок относится к тесту, а не к серверу. Его способ запустить блок кода после завершения всех асинхронных действий – Raynos