使用 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();
});
});
假设您正在通过 express 使用
req.ip
检查 ip 地址(尽管其他框架的行为可能相同),
使用所需的 ip 地址在测试中设置 X-Forwarded-For
标头:
.set('X-Forwarded-For', '192.168.2.1')
您可能需要在您的服务器中启用信任代理选项:
app.enable('trust proxy')
您可以设置通常包含 IP 地址、
Remote-Addr
和 X-Http-Forwarded-For
的标头。您的应用可能正在检查其中一个或两个标头以确定 IP 地址。
.set('Accept', 'application/json')
.set('Remote-Addr', '192.168.2.1')
您可以使用
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();
});
});