nock.back记录模式不起作用的超级测试模拟

时间:2018-09-25 15:45:07

标签: javascript node.js jestjs supertest nock

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

nock.back模式下使用dryrun可以很好地工作,但是当我将模式设置为record时,尽管夹具已正确生成,但第二次运行该测试时却无法正常工作。

我需要以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

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

1 个答案:

答案 0 :(得分:0)

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

此拒绝还包括supertest对应用程序执行的实际内部请求,因此必须允许本地主机来解决它,例如:

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