在超测请求中设置ip

问题描述 投票:0回答:3

使用 supertest,我可以请求测试我的 node.js 应用程序

var request = require('supertest');
var api = require('../server').app;

  ...

  it('json response', function(done){

    request(api)
      .get('/api')
      .set('Accept', 'application/json')
      .expect('Content-Type', /json/)
      .end(function(err, res){
        done();
      });
  });

如何设置特定的 ip 来发出测试请求?

  it('ip access denied', function(done){

    request(api)
      .get('/api')
      .set('Accept', 'application/json')
      .expect('Content-Type', /json/)
      // set specific ip
      .end(function(err, res){
        res.body.message.should.eql('Access denied');
        done();
      });
  });
node.js mocha.js supertest
3个回答
13
投票

假设您正在通过 express 使用

req.ip
检查 ip 地址(尽管其他框架的行为可能相同), 使用所需的 ip 地址在测试中设置
X-Forwarded-For
标头:

.set('X-Forwarded-For', '192.168.2.1')

您可能需要在您的服务器中启用信任代理选项:

app.enable('trust proxy')

1
投票

您可以设置通常包含 IP 地址、

Remote-Addr
X-Http-Forwarded-For
的标头。您的应用可能正在检查其中一个或两个标头以确定 IP 地址。

.set('Accept', 'application/json')
.set('Remote-Addr', '192.168.2.1')

0
投票

您可以使用

jest.spyon

模拟 ip 属性
import { request } from "express";
// import statementts

const CLIENT_IP = '1.2.3.4';

// make a request
it('ip access denied', function(done) {
  jest.spyOn(request, 'ip', 'get').mockReturnValue(CLIENT_IP);

  request(api)
    .get('/api')
    .set('Accept', 'application/json')
    .expect('Content-Type', /json/)
    .end(function(err, res) {
      res.body.message.should.eql('Access denied');
      done();
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.