我有一个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的调用已正确完成
答案 0 :(得分:0)
这里的问题是第二次使用已经创建的夹具运行测试时,所有未出现在夹具文件中的http请求都被拒绝。
此拒绝还包括supertest对应用程序执行的实际内部请求,因此必须允许本地主机来解决它,例如:
nock.enableNetConnect(/(localhost|127\.0\.0\.1)/);