nock处理fetch req但不阻止http调用

时间:2017-12-23 14:31:19

标签: javascript testing fetch jest nock

我正在使用nock拦截对https://www.youtube.com/oembed?url=https://youtu.be/m4hklkGvTGQfetch来电。像这样:

it(`properly responds to YouTube URL ${url}`, async () => {
    nock('https://www.youtube.com')
        .get('/oembed')
        .query(true)
        .reply(200, remoteResponse);
    const youTube = new YouTube(url);
    const response = await youTube.getResponse(); // this contains the fetch call
    expect(response).toEqual(expectedResponse);
    nock.restore();
});

我看到nock正确截取我的fetch因为

  • 如果我更改remoteResponse(请参阅第5行,.reply(200, remoteResponse),我的测试会按预期运行/失败
  • 如果我将截取网址从https://www.youtube.com更改为https://www.sometingelse.com,则nock会告诉我它没有捕获获取请求。

但是,如果我关闭WiFi并运行测试,我可以看到我的应用程序警告我HTTP请求失败:

  

请求https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=m4hklkGvTGQ失败,原因:getaddrinfo ENOTFOUND www.youtube.com www.youtube.com:443

另外,当我运行我的测试时,它们需要大约1秒钟(已经很长)了,当我打开WiFi时,它们会立即完成。

我想知道为什么还有http请求

1 个答案:

答案 0 :(得分:0)

我找到了答案。我的代码我正在调用nock.restore();,我的代码是异步的。我猜我在其他测试运行时正在恢复nock模拟。但是,删除stm可以解决这个问题,因为nock总是拦截一个电话,但它只是没问题。