是否有方便的方法来模拟单元测试中间件的HTTP请求和响应对象?
答案 0 :(得分:25)
看起来https://github.com/howardabrams/node-mocks-http和https://github.com/vojtajina/node-mocks都可用于创建模拟http.ServerRequest
和http.ServerResponse
对象。
答案 1 :(得分:7)
从标签看,这个问题看起来像是Express。在这种情况下,supertest非常好:
var request = require('supertest')
, express = require('express');
var app = express();
app.get('/user', function(req, res){
res.send(201, { name: 'tobi' });
});
request(app)
.get('/user')
.expect('Content-Type', /json/)
.expect('Content-Length', '20')
.expect(201)
.end(function(err, res){
if (err) throw err;
});
对于一般节点使用,Flatiron Nock看起来是个不错的选择:
var nock = require('nock');
var example = nock('http://example.com')
.get('/foo')
.reply(200, { foo: 'bar' });
var http = require('http');
var options = {
host: 'example.com',
port: 80,
path: '/foo',
method: 'GET'
}
var req = http.request(options, function(res) {
res.on('data', function(chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function(e) {
console.log('error: ' + e);
});
req.end();
输出:
BODY:{“foo”:“bar”}
答案 2 :(得分:1)
答案 3 :(得分:1)
我写了一个库来模拟通过标准HTTP或通过请求模型发出的请求的响应:
答案 4 :(得分:0)
查看https://github.com/timsavery/node-hmock或npm install hmock
...欢迎任何反馈!到目前为止,解决方案对我来说效果很好。
答案 5 :(得分:0)
Mockery看起来很棒。
基本上它劫持require
次调用,并返回您指定的不同对象/函数存根。
答案 6 :(得分:0)
我鼓励您使用motty。为什么我们需要另一个代码?