gpt4 book ai didi

javascript - 期待 axios-mock-adapter 出现错误

转载 作者:可可西里 更新时间:2023-11-01 02:25:08 24 4
gpt4 key购买 nike

我正在尝试使用 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.

如何使用 axios-mock-adapter 使用我的 gethandleResponse 方法进行测试以确保抛出错误?谢谢!

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() 需要一个同步异常,但您的代码实际上拒绝了一个 promise 。可能令人困惑的是,您在 handleResponse 中看到了 throw new Error('foo');。这是抛出异常,没错。但是,因为此代码由 async 函数调用,此异常被转换为 promise 拒绝。所以 await get('sampleUrl') 不会导致抛出同步异常,但会导致异步 promise 拒绝。

查看 Jest 的 documentation ,在我看来你应该这样做:

return expect(expectedError()).rejects.toThrowError();

你需要调用 expectedError 因为它是一个返回 promise 的函数,你需要使用 .rejects 将拒绝转换为一个普通的异常,可以是使用 .toThrowError() 测试。确保返回断言,或者 await 它。否则你将有悬而未决的 promise 。

关于javascript - 期待 axios-mock-adapter 出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55712979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com