我有一些应用程序代码可以验证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();
});
});
});
答案 0 :(得分:0)
节点的http.ClientRequest.connection
是socket
的{{3}}。当前版本的Nock没有正确设置connection
别名(它是alias,但尚未发布),但是,它确实创建了一个recently fixed的虚拟套接字。在socket
属性上。
请记住,虚拟Socket
对象没有远程remoteAddress
属性,但是您应该能够在创建请求和调用end
之间添加一个。
req.socket.remoteAddress = '127.0.0.1'
req.end()