【发布时间】: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