首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >期望使用axios模拟适配器出现错误

期望使用axios模拟适配器出现错误
EN

Stack Overflow用户
提问于 2019-04-16 16:42:32
回答 1查看 8.6K关注 0票数 15

我试图用axios-mock-adapter测试一个axios请求,这样就会在状态不等于200的情况下抛出一个错误。但是,当我执行测试(请参阅api.test.js)时,我会收到以下消息:

错误:expect(函数).toThrowError(未定义) 期望函数抛出一个错误。但它没有扔任何东西。

如何使用axios-mock-adapter使用gethandleResponse方法测试以确保引发错误?谢谢!

api.test.js:

代码语言:javascript
复制
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();
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-18 22:05:54

我在您的代码中看到的问题是,expect().toThrowError()期望出现同步异常,但是您的代码实际上拒绝了承诺。可能令人困惑的一点是,您在throw new Error('foo');中看到了handleResponse。这是个例外,真的。但是,因为这个代码是由一个async函数调用的,所以这个异常被转换为一个承诺的拒绝。因此,await get('sampleUrl')不会导致抛出同步异常,而是导致异步承诺拒绝。

看看Jest的文档,我觉得你应该这么做:

代码语言:javascript
复制
return expect(expectedError()).rejects.toThrowError();

您需要调用expectedError,因为它是一个返回承诺的函数,您需要使用.rejects将拒绝转换为可以用.toThrowError()测试的简单异常。确保返回断言,或await它。否则你会有悬空的承诺。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55712979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档