Bat*_*man 4 javascript jestjs axios
我创建了一个名为 API 的类,它是 Axios 的一个简单包装器
export class API {
static get = async (route: string, version: string = API_VERSION) => {
try {
return await axios.get(`${BASE_URL + version}${route}`);
} catch (error) {
throw error;
}
};
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试测试 get 方法的 catch 分支:
我试过:
describe('API Throws Errors', () => {
beforeEach(() => {
// axios.get.mockImplementation(() => Promise.reject('rejected'));
jest.mock('axios', () => ({
get: jest.fn().mockReturnValue(Promise.reject('error'))
}));
});
it('get fails', async () => {
await expect(() => {
API.get(GROUPS.url());
}).rejects.toEqual('error');
});
afterEach(() => {
jest.clearAllMocks();
});
});
Run Code Online (Sandbox Code Playgroud)
axios.get
您可以使用 来模拟 的行为jest.mock
。将以下代码放在该describe
部分上方:
jest.mock('axios', () => ({
get: jest.fn().mockReturnValue(Promise.reject('error'))
}));
Run Code Online (Sandbox Code Playgroud)
然后您测试错误,如下所示:
it('get fails', async () => {
await expect(API.get("bad_url")).rejects.toEqual('error');
});
Run Code Online (Sandbox Code Playgroud)
确切的代码
jest.mock('axios', () => ({
get: jest.fn().mockReturnValue(Promise.reject('error')),
}));
describe('API Throws Errors', () => {
it('get fails', async () => {
await expect(API.get(GROUPS.url())).rejects.toEqual('error');
});
});
Run Code Online (Sandbox Code Playgroud)
笔记:
如果您有另一个不应失败的测试用例,您可以模拟它以 return Promise.resolve()
。或者你可以简单地清除模拟。
describe('API Throws Errors', () => {
it('get fails', async () => {
await expect(API.get(GROUPS.url())).rejects.toEqual('error');
});
it('should success', async () => {
Axios.get.mockReturnValue(Promise.resolve(SOME_VALUE));
await expect(API.get(GROUPS.url())).resolves.toEqual(SOME_VALUE);
});
});
Run Code Online (Sandbox Code Playgroud)