gpt4 book ai didi

asynchronous - 在 done() 之前开 Jest 完成异步测试

转载 作者:行者123 更新时间:2023-11-28 20:36:56 24 4
gpt4 key购买 nike

我在 Jest 中编写异步测试时遇到了问题。我很确定在异步调用返回任何内容之前测试已经完成并通过,尽管我已经尝试了所有方法。我知道该功能有效,因为它在测试套件完成后记录了正确的响应。这是测试代码:

describe('updateUser', () => {
test('should update a user', (done) => {

updateUser(user).then(({err, res}) => {
console.log('updated user:', err, res); // this show up after the test is done
expect(err).toBeFalsy();
expect(res).toBeTruthy();
done();
});
});
});

控制台输出:

 updateUser
✓ should update a user (68ms)

Test Suites: 1 passed, 1 total
Tests: 3 passed, 3 total
Snapshots: 0 total
Time: 6.058s
Ran all test suites.
console.log server/db/crud_Users/crud_user.test.js:38
updated user: null { homeLocations: [],
meetingPlaces: [],
hostedEvents: [],
attendingEvents: [],
flags: [],
tokens: [],
_id: 5b2147495995cb45f9c4f079,
name: 'test',
email: '83277963493533480000@test.com',
password: 'testtest',
ageRange: '1',
gender: 'Female',
accountCreatedAt: null,
__v: 0 }

预期行为:测试套件在完成之前等待 console.log 语句和断言运行。

实际行为:它没有。

我还尝试将测试回调设为异步函数并等待 updateUser 调用,但没有任何改变;我尝试在第二个 .then block 中添加 done() 回调,但没有结果。

最佳答案

它只是关于 Jest 在异步测试中如何输出东西。我刚刚检查过,但不知道如何证明这一点。

如果您删除 done(); 调用,您将因为超时而导致测试失败。如果您将期望更改为无效,您的测试也会失败。所以它工作正常。当然。

此外,由于 updateUser 返回 Promise,您不需要运行 done()。只需返回 Promise,这样测试会稍微轻松一些:

test('should update a user', () => {
return updateUser(user).then(({err, res}) => {
expect(err).toBeFalsy();
expect(res).toBeTruthy();
});
});

关于asynchronous - 在 done() 之前开 Jest 完成异步测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50842439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com