使用node-mocks-httptesting一个服务,没有事件发出
我有一个简单的服务,我想testing,通过调用它的控制器。 我想我会使用node-mocks-http创build一个模拟请求,并查看响应的结果。 然而,尽pipe所有的文档和示例代码,我无法得到响应发出任何事件(“结束”,“发送”,甚至“错误”),因此不知道何时testing输出。
这是一个简单的function(使用Express 4. *):
export function getServiceHealth(req, res) { let message = 'service has been up for ' + process.uptime() + ' seconds!'; res.status(200).send(message); }
这是我的testing(茉莉花):
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); }); });
我得到这个testing的唯一方法就是完成(不会抛出超时错误),取消setTimeout
行注释 – 显然不是正确的方法。 而当我这样做的时候, res
的数据正是我所期望的 – 意思是除了事件触发之外,一切正常。
我需要做些什么来获得在res
触发的事件?
PS :关于这是一些ES6importshenanigan的机会,我试过这个:
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); }); });