Jim*_*mmy 11 javascript jestjs axios axios-mock-adapter
我正在尝试使用来测试axios get请求axios-mock-adapter,以便在状态不等于200的情况下引发错误。但是,当我执行测试时(请参阅参考资料api.test.js),我得到以下消息:
错误:expect(function).toThrowError(未定义)
预期函数抛出错误。但是它什么也没扔。
如何axios-mock-adapter使用get和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();
});
Run Code Online (Sandbox Code Playgroud)
我在您的代码中看到的问题是expect().toThrowError()期望同步异常,但是您的代码实际上拒绝了Promise。可能令人困惑的一点是,您throw new Error('foo');在自己的计算机中看到了handleResponse。真是个例外。但是,由于此代码是由async函数调用的,因此该异常将转换为承诺拒绝。因此await get('sampleUrl'),不会导致引发同步异常,而是会导致异步承诺拒绝。
查看Jest的文档,在我看来您应该这样做:
return expect(expectedError()).rejects.toThrowError();
Run Code Online (Sandbox Code Playgroud)
您需要进行调用,expectedError因为它是一个返回Promise的函数,并且需要.rejects用于将拒绝转换为可以使用进行测试的普通异常.toThrowError()。确保返回断言或await它。否则,您将有悬空的承诺。
| 归档时间: |
|
| 查看次数: |
1098 次 |
| 最近记录: |