繁体   English   中英

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

[英]Testing 400 status code axios throws error

我正在为一个正在研究的项目创建一个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响应/验证消息,以在调用此函数的函数中进行处理。

实际上,您想拦截响应并根据需要对其进行转换。 axios文档中有专门针对拦截器的部分 作为您可以使用它的示例,这是我最近在一个带有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实例,则也需要为此实例重新注入响应拦截器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM