【问题标题】:Axios: How to get the error code in case of an "Network Error"?Axios:出现“网络错误”时如何获取错误代码?
【发布时间】:2021-08-24 16:48:11
【问题描述】:

我想测试一个 axios 后调用,如果服务器未运行,该调用应该以“ECONNREFUSED”拒绝。

const promise= axios.post("/path/under/test", {"some":"data"});
await expect(promise).rejects.toThrowError("ECONNREFUSED");

不幸的是,该错误在测试中包含一个非常通用的“网络错误”消息。我可以在控制台输出中看到预期代码“ECONNREFUSED”的“某处”是根错误的一部分。但是如何获取错误码呢?

这就是“stringyfied”错误的样子:

{"message":"Network Error","name":"Error","stack":"[...]"

【问题讨论】:

  • toThrowError 应该在错误消息包含子字符串时匹配。因此,如果ECONNREFUSED 在某个地方,错误应该会通过。也尝试使用RegExtoThrowError(/ECONNREFUSED/);
  • 问题是错误信息中没有包含错误代码。

标签: node.js axios jestjs ts-jest


【解决方案1】:

原因

显示简化消息“网络错误”是因为 Axios 在测试期间假定它在浏览器中运行。出于安全原因,所有与 I/O 相关的错误都简化为此消息,只有在 Axios 假定在 Node 中运行时才能区分特定错误。

解决方案

在测试文件中导入以下内容时,将包含所有错误代码。它使 Axios 假设在 Node.js 中运行。这也有助于避免 CORS 问题。

axios.defaults.adapter = require("axios/lib/adapters/http");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-29
    • 2020-10-02
    • 2020-03-16
    • 2021-10-30
    • 2022-09-30
    • 2019-10-11
    • 2019-09-04
    • 2020-10-26
    相关资源
    最近更新 更多