期待 axios-mock-adapter 出现错误
Expecting an error with axios-mock-adapter
我正在尝试使用 axios-mock-adapter
测试 axios get 请求,以便在状态不等于 200 时抛出错误。但是,当我执行测试时(请参阅 api.test.js
),我收到以下消息:
Error: expect(function).toThrowError(undefined)
Expected the function to throw an error. But it didn't throw anything.
如何使用 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();
});
我在您的代码中看到的问题是 expect().toThrowError()
需要同步异常,但您的代码实际上拒绝了承诺。可能令人困惑的一点是,您在 handleResponse
中看到 throw new Error('foo');
。这是抛出异常,没错。但是,因为此代码由 async
函数调用,此异常被转换为承诺拒绝。所以 await get('sampleUrl')
不会导致抛出同步异常,但会导致异步承诺拒绝。
看看 Jest 的 documentation,在我看来你应该这样做:
return expect(expectedError()).rejects.toThrowError();
您需要调用 expectedError
因为它是一个 return 承诺的函数,您需要使用 .rejects
将拒绝转换为可以测试的普通异常.toThrowError()
。确保 return 断言,或 await
它。否则你将有悬而未决的承诺。
我正在尝试使用 axios-mock-adapter
测试 axios get 请求,以便在状态不等于 200 时抛出错误。但是,当我执行测试时(请参阅 api.test.js
),我收到以下消息:
Error: expect(function).toThrowError(undefined)
Expected the function to throw an error. But it didn't throw anything.
如何使用 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();
});
我在您的代码中看到的问题是 expect().toThrowError()
需要同步异常,但您的代码实际上拒绝了承诺。可能令人困惑的一点是,您在 handleResponse
中看到 throw new Error('foo');
。这是抛出异常,没错。但是,因为此代码由 async
函数调用,此异常被转换为承诺拒绝。所以 await get('sampleUrl')
不会导致抛出同步异常,但会导致异步承诺拒绝。
看看 Jest 的 documentation,在我看来你应该这样做:
return expect(expectedError()).rejects.toThrowError();
您需要调用 expectedError
因为它是一个 return 承诺的函数,您需要使用 .rejects
将拒绝转换为可以测试的普通异常.toThrowError()
。确保 return 断言,或 await
它。否则你将有悬而未决的承诺。