bac*_*725 2 javascript unit-testing jestjs
我想用 Jest 模拟异步函数的 catch 块中的返回值
这是我正在为其编写单元测试的函数:
try {
make some axios request
}
return users;
} catch (err) {
return new Map();
}
};
it('should catch error when query is unsuccessful', async () => {
axios.get.mockRejectedValue(new Map());
const res = getUserDataByIds('someUserIds');
await expect(res).rejects.toThrow();
});
Run Code Online (Sandbox Code Playgroud)
我从 Jest 收到错误消息:
expect(received).rejects.toEqual()
Received promise resolved instead of rejected
Resolved to value: Map {}
Run Code Online (Sandbox Code Playgroud)
我希望测试应该通过,因为我在嘲笑一个被拒绝的值。
这是解决方案:
index.ts:
import axios from 'axios';
export async function getUserDataByIds(ids: string[]) {
try {
const users = await axios.get('/users');
return users;
} catch (err) {
return new Map();
}
}
Run Code Online (Sandbox Code Playgroud)
index.spec.ts:
import { getUserDataByIds } from './';
import axios from 'axios';
jest.mock('axios');
describe('getUserDataByIds', () => {
afterEach(() => {
jest.resetAllMocks();
});
it('should return empty Map when axios.get failed', async () => {
const getError = new Error('network error');
axios.get = jest.fn().mockRejectedValue(getError);
const actualValue = await getUserDataByIds(['1']);
expect(actualValue).toEqual(new Map());
expect(axios.get).toBeCalledWith('/users');
});
it('should return users', async () => {
const mockedUsers = [{ userId: 1 }];
axios.get = jest.fn().mockResolvedValue(mockedUsers);
const actualValue = await getUserDataByIds(['1']);
expect(actualValue).toEqual(mockedUsers);
expect(axios.get).toBeCalledWith('/users');
});
});
Run Code Online (Sandbox Code Playgroud)
100% 覆盖率的单元测试结果:
PASS src/stackoverflow/58273544/index.spec.ts
getUserDataByIds
? should return empty Map when axios.get failed (12ms)
? should return users (4ms)
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
index.ts | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 5.597s, estimated 7s
Run Code Online (Sandbox Code Playgroud)
源代码:https : //github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/58273544