Javascript Nock不拦截对第三方的呼叫

Javascript Nock不拦截对第三方的呼叫,javascript,mocking,automated-tests,web-api-testing,nock,Javascript,Mocking,Automated Tests,Web Api Testing,Nock,我正在尝试使用SuperTest自动化一些REST服务。该服务是一个POST调用,它在内部调用另一个第三方服务GET方法。我试图模拟第三方服务,以提高测试效率并减少测试执行时间。 我正在使用nock模拟第三方服务呼叫 我的第一个服务电话看起来像- curl -X POST \ http://internal-url.com/path \ -H 'Content-Type: application/json' \ -H 'cache-control: no-cache' \ -d

我正在尝试使用SuperTest自动化一些REST服务。该服务是一个POST调用,它在内部调用另一个第三方服务GET方法。我试图模拟第三方服务,以提高测试效率并减少测试执行时间。 我正在使用nock模拟第三方服务呼叫

我的第一个服务电话看起来像-

curl -X POST \
  http://internal-url.com/path \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
    "key1": "value1",
    "key2": "value2"
}'
curl -X GET \
  'http://3rdparty-url.com/value1' \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -H 'key2: value2'
此服务调用第三方服务,如下所示-

curl -X POST \
  http://internal-url.com/path \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
    "key1": "value1",
    "key2": "value2"
}'
curl -X GET \
  'http://3rdparty-url.com/value1' \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -H 'key2: value2'
我在beforeTest中使用nock模拟了服务,比如-

nock('http://3rdparty-url.com')
    .get('/value1')
    .reply(200, 'domain matched');
当我使用SuperTest直接调用此第三方服务时,它将返回模拟响应。但是,我的目标是进行POST调用,并用存根截获对第三方服务的调用,这是不会发生的。我使用WireMock在Java世界中实现了类似的功能。是否可以使用nock执行此操作

我的测试看起来像-

var payload = {"key1": "value1", "key2": "value2"};
describe('Test third party Service', function () {
    it('should return success on POST /path service', function (done) {
        supertest('http://internal-url.com')
            .post('/path')
            .send(payload)
            .expect(200)
            .expect('Content-type', /application\/json/)
            .expect(function (response) {
                console.log(response.body);
                //test fails as third party server is not available and mock doesn't intercept
            })
            .end(done);
    });
通过在当前进程的内存中对节点的http和https模块中的函数进行monkey修补。这意味着对Nock的调用必须与发出请求的过程在同一个过程中进行


在您的情况下,无论运行“internalurl.com”应用程序的是什么,都需要调用nock。nock和supertest的一个常见约定是在与测试相同的过程中运行内部应用程序的实例。演示如何使用诸如Express之类的框架实现这一点。

使用nock是可能的,并且您的示例是正确的。您的测试中一定有其他设置不正确的地方。如果您使用supertest调用本地应用程序时包含代码,则可能会有所帮助。@MattR.Wilson-更新了测试您采取了哪些步骤来验证从内部应用程序发送的请求是否与您在上面发布的curl GET请求相同?另外,内部应用程序是否与测试在同一节点进程中运行?@MattR.Wilson-我已经验证了应用程序日志,它显示了我正在使用的确切CURL。在第二点上,应用程序和测试在不同的节点进程上运行。这可能是问题所在吗?