如何使用Nock库模拟连接?

时间:2019-06-25 02:37:33

标签: node.js testing nock

我有一些应用程序代码可以验证response.connection.remoteAddress不是本地IP,但是在使用nock response.connection时只是一个没有remoteAddress属性的EventEmitter实例。如何修改nock创建的响应?

更新: 我最终嘲笑了isPrivate():

it('GET returns a 403 status code when example.com resolved to internal ip', function(done){
    const scope = nock('https://example.com')
    .get('/some/fetched/url')
    .replyWithFile(200, FILE_CONTENT);

    spyOn(ip, 'isPrivate').and.callFake(() => {
        return true;
    });

    // this handler fetches a url, we want to throw an error if it
    // resolves to an internal IP
    fetch(`${env.testHost}/some-url-under-test`).then(function(response){
        response.text().then(function(body){
            scope.done();
            expect(response.status).toBe(403);
            expect(body).toEqual('Forbidden');
            done();
        });
    });
});

1 个答案:

答案 0 :(得分:0)

节点的http.ClientRequest.connectionsocket的{​​{3}}。当前版本的Nock没有正确设置connection别名(它是alias,但尚未发布),但是,它确实创建了一个recently fixed的虚拟套接字。在socket属性上。

请记住,虚拟Socket对象没有远程remoteAddress属性,但是您应该能够在创建请求和调用end之间添加一个。

req.socket.remoteAddress = '127.0.0.1'
req.end()