【问题标题】:supertest mock with nock.back record mode not working带有 nock.back 记录模式的超测试模拟不起作用
【发布时间】:2019-03-01 07:25:28
【问题描述】:

我有一个 nodejs 服务,当调用它的端点时,它会对服务 B 进行 http 调用。我正在向我的服务添加验收测试以测试集成。

dryrun 模式下使用nock.back 效果很好,但是当我将模式设置为record 时,尽管正确生成了fixture,但在我第二次运行它时测试不起作用。

我需要在record 模式下运行测试,因为在某些运行测试的环境中,服务 B 将无法访问。

这是我的测试:

nock.back.setMode('record');
nock.back.fixtures = path.join(__dirname, '..', 'fixtures');

it('validates the contract for at least one hotel', (done) => {
  return nock
    .back('myfixture.json', defaultOptions)
    .then(({ nockDone }) =>
      request(app)
        .get('/myapi/route')
        .then((res) => {
          expect(res.status).toBe(200);
          console.log(res.body);
          done();
        })
        .then(nockDone),
    )
    .then();
});

在之前没有生成myfixture.json 的情况下运行时,测试通过并且正确生成了夹具。下次我运行测试时(有固定装置),测试失败:

NetConnectNotAllowedError: Nock: Not allow net connect for "127.0.0.1:52027/myapi/route

另一方面,如果我设置dryrun 模式而不是record 模式,则测试始终通过并且响应的主体是正确的,因此对服务B 的调用正确完成。

【问题讨论】:

    标签: javascript node.js jestjs supertest nock


    【解决方案1】:

    这里的问题是,第二次使用已经创建的夹具运行测试时,所有未出现在夹具文件中的 http 请求都被拒绝。

    这种拒绝还包括 supertest 对应用程序所做的实际内部请求,因此必须允许 localhost 解决它,例如:

    nock.enableNetConnect(/(localhost|127\.0\.0\.1)/);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      相关资源
      最近更新 更多