javascript - 期望 axios-mock-adapter 出错
问题描述
我正在尝试使用 测试 axios get 请求axios-mock-adapter
,从而在状态不等于 200 的情况下引发错误。但是,当我执行测试时(请参阅api.test.js
),我收到以下消息:
错误:expect(function).toThrowError(undefined)
期望函数抛出错误。但它没有扔任何东西。
如何axios-mock-adapter
使用 myget
和handleResponse
方法进行测试以确保引发错误?谢谢!
api.test.js:
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
const handleResponse = (response) => {
if (response.status !== 200) {
throw new Error('foo');
} else {
return response.data;
}
};
const get = async (url) => {
const response = await axios.get(url, {withCredentials: true});
return handleResponse(response);
};
test('testing that, when making a get request to the appropriate url, an error is thrown ' +
' when status !== 200', async () => {
new MockAdapter(axios)
.onGet('sampleUrl')
.reply(500, {data: 'payload'});
const expectedError = async () => {
await get('sampleUrl');
};
expect(expectedError).toThrowError();
});
解决方案
我在您的代码中看到的问题是expect().toThrowError()
需要同步异常,但您的代码实际上拒绝了一个承诺。可能令人困惑的是您throw new Error('foo');
在handleResponse
. 这是抛出异常,真的。然而,因为这个代码是由一个async
函数调用的,所以这个异常被转换为一个承诺拒绝。因此await get('sampleUrl')
不会导致引发同步异常,而是会导致异步承诺拒绝。
查看 Jest 的文档,在我看来您应该这样做:
return expect(expectedError()).rejects.toThrowError();
您需要调用expectedError
,因为它是一个返回承诺的函数,并且您需要使用.rejects
将拒绝转换为可以使用.toThrowError()
. 确保返回断言,或者await
它。否则你会有悬而未决的承诺。
推荐阅读
- python - 无法在本地机器上加载张量板
- javascript - 减去今天和明天的日期,得到第 365 天
- php - 我的核心 php 网站站点地图未在谷歌网站管理员中索引
- spring - 如何在构建会话工厂期间获取元数据
- sql - SQL Count 部分字符串
- dialogflow-es - 为什么DialogFlow的fullfillment_text和fulfillment_message会不同?
- asp.net-core - “asp.net core”可以连接SAP吗?
- c++ - Visual C++ 中的标准不符合项
- spring - file.jar 中的 Class-Path 清单属性
- mongoose - Mongoose - 填充(路径,回调)与填充(路径).exec?