【发布时间】:2018-12-11 21:39:33
【问题描述】:
我使用Supertest 来测试我的 Express 应用程序,但是当我希望我的处理程序在发送请求之后进行异步处理时,我遇到了挑战。以这段代码为例:
const request = require('supertest');
const express = require('express');
const app = express();
app.get('/user', async (req, res) => {
res.status(200).json({ success: true });
await someAsyncTaskThatHappensAfterTheResponse();
});
describe('A Simple Test', () => {
it('should get a valid response', () => {
return request(app)
.get('/user')
.expect(200)
.then(response => {
// Test stuff here.
});
});
});
如果someAsyncTaskThatHappensAfterTheResponse() 调用抛出一个错误,那么这里的测试会受到竞争条件的影响,它可能会或可能不会基于该错误而失败。即使除了错误处理之外,如果在设置响应后发生副作用,也很难检查它们。想象一下,您想在发送响应后触发数据库更新。您将无法从测试中判断出您应该期望更新何时完成。有什么方法可以使用 Supertest 等到处理函数执行完毕?
【问题讨论】:
-
你找到解决这个问题的好方法了吗?
标签: node.js unit-testing express supertest