我想通过调用其 Controller 来测试一个简单的服务。我以为我会使用 node-mocks-http创建模拟请求,并查看响应结果。然而,尽管有所有文档和示例代码,我无法获得发出任何事件(“结束”、“发送”甚至“错误”)的响应,因此无法知道何时测试输出。
这是一个简单的函数(使用 Express 4.*):
export function getServiceHealth(req, res) {
let message = 'service has been up for ' + process.uptime() + ' seconds!';
res.status(200).send(message);
}
这是我的测试 (Jasmine):
import {EventEmitter} from 'events';
import httpMock from 'node-mocks-http';
import {getServiceHealth} from '../../lib/controllers/health/';
describe('Service health integration tests', () => {
it('should get health', done => {
let req = httpMock.createRequest({url: '/health'});
let res = httpMock.createResponse({EventEmitter: EventEmitter});
getServiceHealth(req, res);
res.on('end', () => {
console.log(res._getData());
done();
});
res.on('send', () => {
console.log(res._getData());
done();
});
//setTimeout(() => {console.log(res._getData()); done();}, 1000);
});
});
我完成此测试(不抛出超时错误)的唯一方法是取消注释 setTimeout
行 - 显然不是正确的方法。当我这样做时,res
中的数据正是我所期望的 - 这意味着除了事件触发之外,一切正常。
我需要做什么才能在 res
上触发事件?
PS:如果这是一些 ES6 导入恶作剧,我试过这个:
let res = httpMock.createResponse({EventEmitter: require('events').EventEmitter});
同样的结果。
PPS:打开issue在 repo
最佳答案
打开 issue on GitHub 后,我得到了答案:
该属性名为 eventEmitter
- 而不是 EventEmitter
。所以我应该写:
var res = httpMocks.createResponse({eventEmitter: EventEmitter});
有点困惑,但我希望他们能修复文档以反射(reflect)它。该问题仍未解决(截至 2015 年 12 月 29 日)待定文档。
关于javascript - 使用 node-mocks-http 测试没有发出事件的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32359576/