我正在为nodejs服务构建集成测试。我启动了服务,并等待输入到Redis队列。我的测试首先将此项添加到队列中,然后检查不同队列中的输出以检查结果。到目前为止,我发现的最佳解决方案是在队列处理完毕并正在等待另一个项目时发送一个过程信号。否则,计时将关闭并且错误不会被消除。它正在测试的过程没有返回或结束,它无限循环直到外部停止,所以我等不及要返回的承诺。
it("integration test, function(){
this.timeout(0);
// ... Other stuff
const resolvingPromise =
new Promise(async (resolve) => {
logger.info("Get item")
process.on('message', async msg => {
logger.debug(msg)
if (msg == "next") {
const itemFromQueue = await redis.brpop(item_queue, 0);
logger.debug("redis item: " + itemFromQueue)
result = {
"item_queue": JSON.parse(itemFromQueue[1]).error
}
resolve(result)
}
})
});
return resolvingPromise.then((result) => {
logger.debug(result)
logger.debug(expectedResult)
// expectedResult is defined earlier
expect(JSON.stringify(result)).to.equal(JSON.stringify(expectedResult))
});
});
此解决方案返回两个结果进行比较,这由debug语句演示,但是当达到期望值时,它挂起并且永不解析。因为我正在使用Promises,所以使用done()只会引发错误。
我尝试了太多的组合以在此处进行演示,但是以上是我想根据服务的其余部分进行工作的结构。
任何指导表示赞赏。