【问题标题】:nodejs nock http get always returns 503nodejs nock http get 总是返回 503
【发布时间】:2021-01-10 22:00:06
【问题描述】:

我想使用 nock 来测试一些 http 调用,但它总是返回 503 服务不可用

describe('BASIC API AUTH TESTS', function() {
  'use strict';

  before(async () => {
    if (!nock.isActive()) nock.activate();
  });

  after(async() => {
    nock.cleanAll();
    await helpers.removeTestUsers(mongoDb);
  });

it('should return nock response', async() => {
    if (!nock.isActive()) nock.activate();
    nock('http://zombo.com').get('/').times(1).reply(200, 'Ok');
    http.get('http://zombo.com/'); // expected 200 got 503 service unavailable
    console.log('nock.pendingMocks(): ', nock.pendingMocks()); //  [ 'GET http://zombo.com:80/' ]
  });

怎么了?

测试运行者:摩卡 节点版本:8.12 诺克:13.0.4

【问题讨论】:

  • "最新版本的 nock 支持所有当前维护的 Node 版本" (source)。也许尝试使用更新的 Node 版本?
  • 你能澄清一下 http 变量只是 Node 的原生 HTTP 模块吗?

标签: node.js http mocha.js nock


【解决方案1】:

此问题很可能与您在退出测试之前没有等待请​​求响应(通过 Nock)有关。因此,您的 after 块中的 nock.cleanAll(); 正在移除您的 nock,而 http.get 正在尝试进行实时通话。

如果你想坚持使用原生 Node http,你需要抛弃 async(或者喜欢 Promises)。 Node docs 有一个关于如何使用回调等待响应的示例,然后您可以调用Mocha done function。 如果你想坚持使用异步,我推荐一个支持 Promise 的 HTTP 客户端库,然后 await 请求。

【讨论】:

    猜你喜欢
    • 2015-11-22
    • 2018-11-16
    • 2020-08-09
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    相关资源
    最近更新 更多