【发布时间】:2020-11-19 22:50:41
【问题描述】:
我正在使用 mongodb-memory-server 包,但在让我的异步笑话测试正常运行时遇到了一些麻烦。我有一个连接到内存 mongo 数据库的 beforeAll:
beforeAll(async () => await connect());
然后我有一个异步测试:
it("creates a new user", async () => {
const userObj = {
firstName: faker.name.firstName(),
lastName: faker.name.lastName(),
phoneNumber: "+14444444444",
uid: faker.random.uuid(),
};
const userRes = await axios.post(routeUrl + "/", userObj);
const createdUser = userRes.data.user;
expect(createdUser._id).toBeTruthy();
});
问题是我的测试总是超时,因为它既是异步的,又包括一个使用 mongodb-memory-server 修改某些数据的端点。如果我要删除异步并将 userRes 之后的逻辑放在 .then 中,则测试通过。如果我保留 async/await 但在 1000 毫秒异步超时中将代码包装在测试中,则测试通过。关于为什么以上面显示的当前格式测试超时的任何想法?
这是一个通过测试的示例:
it("creates a new user", () => {
const userObj = {
firstName: faker.name.firstName(),
lastName: faker.name.lastName(),
phoneNumber: "+14444444444",
uid: faker.random.uuid(),
};
axios.post(routeUrl + "/", userObj).then(
userRes => {
const createdUser = userRes.data.user;
expect(createdUser._id).toBeTruthy();
}
);
});
【问题讨论】:
-
能分享一下传的版本吗?可能是您的带有
.then的版本没有返回承诺,所以 jest 没有等待它“通过测试”。您还可以通过添加 jestjs.io/docs/en/expect#expectassertionsnumber 检查来确认运行的检查。 -
@dcwither 刚刚添加了一个通过测试的示例
-
你为什么不使用 jest.mock 模拟 mongodb 的东西,并使用类似 npmjs.com/package/supertest 的东西来测试应用程序路由器?
-
我的解释是这是一个端到端/集成测试,所以我没有对此发表评论,但如果这是一个单元测试,那么 Max 的问题指出了一些有价值的资源。
标签: node.js mongodb typescript async-await jestjs