全部
我对Jest还是陌生的,Testing Async Code section给我造成了极大的困惑,它提供了许多处理同一案件的方法:
[1] done()
[2] expect.assertions(1) + return Promise
[3] expect.assertions(1) + return expect.resolves
[4] async callback + await + NO return expect
更令人困惑的是,当我到达Mock Functions section时:
//users.test.js
import axios from 'axios';
import Users from './users';
jest.mock('axios');
test('should fetch users', () => {
const resp = {data: [{name: 'Bob'}]};
axios.get.mockResolvedValue(resp);
// or you could use the following depending on your use case:
// axios.get.mockImplementation(() => Promise.resolve(resp))
return Users.all().then(users => expect(users).toEqual(resp.data));
});
我想知道这4种方式中的哪一种?有细节吗?
答案 0 :(得分:1)
对应于[2] expect.assertions(1) + return Promise
。
请注意,如果您期望expect.assertions
拒绝并使用Promise
,则只需使用catch
:
如果您希望诺言被拒绝,请使用.catch方法。确保添加Expect.assertions以验证是否调用了一定数量的断言。否则,兑现承诺就不会使测试失败。
如果期望Promise
可以解决,那么您可以像代码示例中那样在then
中进行声明,并简单地返回结果Promise
:
只需从测试中返回一个承诺,Jest将等待该承诺解决。如果诺言被拒绝,则测试将自动失败。