【问题标题】:Jest test always pass, using jest to check method request axiosjest测试总是通过,使用jest检查方法请求axios
【发布时间】:2019-01-24 13:26:14
【问题描述】:

我想在不发送请求的情况下检查方法,我只想获取配置来测试方法和参数,我尝试这样做但测试总是通过

import axios from "axios";
it("get Api Call test", () => {

expect.assertions(1);
axios.interceptors.request.use(function (config) {   
    expect(config.method).toBe("get");
    return config;
}, function (error) {   
    return Promise.reject(error);
});

axios.get("testURL");

任何人都知道会发生什么......我不想创建模拟服务器......只想得到配置来测试

【问题讨论】:

    标签: javascript typescript axios jestjs


    【解决方案1】:

    您的目标是断言在请求中使用了给定的端点/http 方法而不进行调用和模拟服务器吗?

    我没有为此使用过axios,所以我将遵从我使用过并取得巨大成功的库。

    Nock 是一个很棒的库,用于测试您不想发送的 HTTP 请求。对我来说,这比模拟服务器要好,因为它在比模拟服务器所触及的更高级别上拦截该请求,从而使其成为更清晰的测试。

    要使用它,你会得到一个像这样的 sn-p:

    const nock = require('nock')
    it("get Api Call test", () => {
      var expectedReturn = {itDidntReallyHitTheEndpoint: true}
      var requiredPayloadForSuccess = { tmId: "test", name: "foo" };
      nock('thedomain.com')
        .post('/endpoint/to/hit/in/test', requiredPayloadForSuccess)
        .reply(200, expectedReturn)
    
      const result = await getResult(endpoint, requiredPayloadForSuccess)
      expect(result, expectedReturn)
    })

    这使您可以验证各种事物。在此示例中,如果(这可能不包括此示例中的所有 nocks 选项,它对于许多应用程序来说是一个非常有用的工具),您将收到错误消息 1)你使用了错误的HTTP方法 2)你打错了终点 3)你没有传递正确的有效载荷

    如果您对该功能不感兴趣,您可以省略 requiredPayloadForSuccess,但我认为它值得包含。

    澄清一下,这会拦截 http 请求,因此您实际上并没有向该端点发出请求。好的部分是关于你的代码的一切认为

    【讨论】:

    • 对不起我的错误示​​例代码,现在我编辑了我想检查的代码。我的项目只允许使用 axios 。然后我会尝试用你的方式使用 axios 。谢谢你的帮助。我会尝试:D
    • 我不想伪造回复。我只想检查方法发送是否“获取”。
    • @nghiepnguyentien 如果您不想模拟或其他任何东西,那么测试不会直接到达端点并且如果它使用正确的参数(方法、uri 等)那么它可以工作吗?您看到请求工作而不是尝试拦截和识别方法还不够吗?
    猜你喜欢
    • 2018-10-17
    • 2020-11-24
    • 1970-01-01
    • 2021-08-25
    • 2020-07-04
    • 2017-12-11
    • 2021-06-09
    • 1970-01-01
    • 2019-06-05
    相关资源
    最近更新 更多