【问题标题】:Why is nock matching request when body, time and timeout should not match?为什么当正文,时间和超时不匹配时,诺克匹配请求?
【发布时间】:2017-08-15 07:52:47
【问题描述】:

我有一个已锁定的服务请求,我预计在这种情况下会出现一个未锁定错误(nock:与请求 POST 不匹配),但会获得成功的响应。想知道为什么!

nock(`http://localhost`, {
                reqheaders: {
                    'Content-Type': 'application/json'
                }
            })
            .post('/')
            .reply(201, function () {
                return fs.readFileSync(`./data/mock-response.json`, 'utf8');
            });

实际的服务调用是

    request(
    url: 'http://localhost/',
    time:true,
    timeout: 5000,
    method: 'POST',
    headers: {
        Content-Type: 'application/json
    },
    body: {
        test:'test'}

)

以下参数与 nock 不匹配 身体,时间,超时 仍然诺克斯还给我正确的儿子

【问题讨论】:

    标签: javascript unit-testing nock


    【解决方案1】:

    您需要在您的nock 对象中指定一个body,否则nock 只会根据URL 和动词拦截它。

    根据official nock documentation,必须指定主体才能匹配。

    你的诺克对象看起来像这样:

    nock(`http://localhost`, {
      reqheaders: {
        'Content-Type': 'application/json'
      }
    })
    .post('/', {
      test: 'test'
    })
    .reply(201, function () {
      return fs.readFileSync(`./data/mock-response.json`, 'utf8');
    });
    

    【讨论】:

    • 这也是我的理解,但是我上面没有身体的任何东西都会给我一个回应,这就是让我感到困惑的地方。为什么我的示例没有抛出 NOCK no match found 错误
    【解决方案2】:

    根据文档:您可以指定要匹配的请求正文作为 get、post、put 或 delete 规范的第二个参数。

    它没有说必须。如果没有指定正文,所有帖子都将匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 2019-05-17
      • 1970-01-01
      • 2012-05-23
      相关资源
      最近更新 更多