我创建了一个名为API的类,它是Axios的简单 Package 器
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;
}
};
}
我尝试测试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();
});
});
3条答案
按热度按时间h79rfbju1#
您可以使用
jest.mock
来模拟axios.get
的行为。将以下代码放在describe
部分之上:然后测试错误如下:
精确代码
备注:
如果你有另一个不应该失败的测试用例,你可以模拟它返回
Promise.resolve()
,或者你可以简单地清除模拟。xytpbqjk2#
你可以像这样嘲笑axios拒绝承诺
这个方法对我来说非常有效。
希望这对你也有效。
zynd9foi3#
toThrowError()
应该是针对函数而不是结果Assert的,因为如果函数调用时发生错误,expect
就没有机会被求值。它只适用于抛出错误的常规函数。它不适用于async
函数,因为它们不抛出错误而是返回结果,这拒绝了承诺。rejects.toThrowError()
构造是一种如何Assert被拒绝的承诺的方法,Assert需要提供一个承诺,而不是一个返回它的函数: