使用node-mock -http来测试没有发出事件的服务
Using node-mocks-http to test a service no event emitted
我有一个简单的服务,我想通过调用它的控制器来测试。我认为应该使用node-mock -http创建一个模拟请求,然后查看响应的结果。然而,尽管有所有的文档和示例代码,我无法获得响应来发出任何事件("end","send"甚至"error"),因此无法知道何时测试输出。
下面是一个简单的函数(使用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 :向回购问题
在GitHub上打开一个问题后,我得到了答案:该属性被命名为eventEmitter
,而不是EventEmitter
。所以我应该写:
var res = httpMocks.createResponse({eventEmitter: EventEmitter});
有点混乱,但我希望他们能修复文档来反映它。该问题仍未解决(截至2015年12月29日),等待文档。
确保在调用getServiceHealth(req, res)之前添加了侦听器;
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});
res.on('end', () => {
console.log(res._getData());
done();
});
res.on('send', () => {
console.log(res._getData());
done();
});
getServiceHealth(req, res);
//setTimeout(() => {console.log(res._getData()); done();}, 1000);
});
});
相关文章:
- PHP REST服务抛出异常——希望避免控制台错误
- 点击启动弹出事件未显示
- 如何在Ol3弹出窗口中添加用javascript创建的按钮上的点击事件
- 单击事件打开两个弹出菜单
- 如何准确地找出引发事件的原因
- 我可以在FullCalendar中设置事件ClickLimit弹出窗口的样式吗
- 信息窗口谷歌地图点击事件给出错误
- D3.js:如何在svg上移动鼠标时创建弹出事件
- 萨特利泽关闭弹出事件
- 如何使用流的排出事件.在节点.js中可写
- 如何在高图表中查找鼠标出事件的系列名称
- jQuery列表中每个产品的基于悬停的弹出事件
- 无法抛出事件
- 鼠标悬停和鼠标移出事件是否不匹配?
- 谷歌地图折线滑出事件
- 鼠标悬停/出事件时奇怪的动画行为
- 字符â€[怎么可能出现在服务的HTML中,而不是在我的源代码中
- JavaScript对话框弹出事件等待OK被按下
- JQuery的可拉出事件不触发,有时可拖动与光标
- 弹出事件处理程序