我尝试测试当API抛出错误时,我的函数是否正确地抛出错误。
这是我的主要职责
export const fetchRate = async (symbol = "BTC") => {
try {
const response = await axios.get(
`https://rest.coinapi.io/v1/exchangerate/${symbol}/USD`,
headers
);
return response;
} catch (e) {
throw e.response.data.error;
}
};
这就是考验
test("If incorrect symbol is passed the function throws an error", async () => {
const e = {
response: {
data: {
error: "We didn't find your currency",
},
status: 550,
},
};
axios.get.mockRejectedValueOnce(e)
await expect(fetchRate()).rejects.toThrow("We didn't find your currency");
});
我希望,既然我抛出了catch
块,这个测试应该可以工作,但是我不断地得到接收函数没有抛出。
1条答案
按热度按时间uoifb46i1#
参见issue#12024
rejects.toThrow
链要求抛出实际的Error对象您抛出了一个
string
,而不是catch
块中的Error
,因此需要使用.rejects.toEqual()
。例如
index.ts
:index.test.ts
:试验结果: