测试400状态代码axios引发错误

时间:2019-08-30 23:49:53

标签: javascript testing axios web-api-testing

我正在为一个正在研究的项目创建一个api测试框架,并且希望验证要发送到端点的JSON对象中的必填字段。

我正在尝试发送带有缺少字段的JSON对象,并期望来自我的应用的400响应以及验证消息。但是,当使用axios进行呼叫时(一定正确),它在收到400时会引发错误。

我希望能够断言期望是400并在验证消息中断言。

我遇到的所有示例都是关于以正确的方式处理400响应,如果您不期望400响应,但是我期望这样。

我似乎找不到其他尝试此方法的人。

async function createReminder(reminderObject) {
  const response = await axios.post(`${config.get('baseUrl')}/reminder`, {
    ...reminderObject
  });

  return response;
}

module.exports.createReminder = createReminder;

这是我目前的工作代码。与有效的呼叫一起使用时,这将产生有效的200。

我需要在响应对象中返回400响应/验证消息,以便在调用此函数的函数中进行处理。

1 个答案:

答案 0 :(得分:0)

实际上,您想拦截并根据需要转换响应。有section in the axios docs专用于拦截器。作为您可以使用它的示例,这是我最近在一个带有Laravel后端的项目中使用的东西:

axios.interceptors.response.use(
  res => Promise.resolve(res.data),
  error => {
    let message = null;
    if (error.response) {
      // if error has a data.error property, it's an error formatted by server
      if (error.response.data.error) message = error.response.data.error;
      else if (error.response.status === 500) message = 'Oops! Something went wrong.';
    } else {
      // if error has a code property, it's an error defined by axios
      if (error.code === 'ECONNABORTED') message = 'Timeout exceeded';
      else message = 'Oops! Something went wrong.';
    }
    // eslint-disable-next-line prefer-promise-reject-errors
    return Promise.reject({ error: message });
  }
);

上面的代码使我可以如下进行axios调用,并且始终希望使用相同的格式:

axios.post('/url', { data: { ... }})
  .then(({ jsonProp1 }) => console.log(jsonProp1))
  .catch(({ error }) => console.log(error);

注意:如果您确实创建了新的axios实例,则也需要为此实例重新注入响应拦截器。

相关问题