首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用节点-mocks http测试没有发出任何事件的服务。

使用节点-mocks http测试没有发出任何事件的服务。
EN

Stack Overflow用户
提问于 2015-09-02 17:29:26
回答 2查看 4.7K关注 0票数 2

我有一个简单的服务,我想测试,通过调用它的控制器。我想我应该使用节点-模拟-http创建一个模拟请求,并查看响应的结果。然而,尽管有所有的文档和示例代码,我无法获得发出任何事件的响应("end“、"send”甚至"error"),因此无法知道何时测试输出。

下面是一个简单的函数(使用Express 4.*):

代码语言:javascript
复制
export function getServiceHealth(req, res) {
  let message = 'service has been up for ' + process.uptime() + ' seconds!';
  res.status(200).send(message);
}

这是我的测试(茉莉花):

代码语言:javascript
复制
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进口的花花公子,我试了一下:

代码语言:javascript
复制
let res = httpMock.createResponse({EventEmitter: require('events').EventEmitter});

同样的结果。

PPS:在回购上打开问题

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-30 03:16:58

打开关于GitHub的问题后,我得到了答案:该属性名为eventEmitter -而不是EventEmitter。所以我应该写:

var res = httpMocks.createResponse({eventEmitter: EventEmitter});

有点混乱,但我希望他们会修正文档来反映它。这一问题仍未解决(截至2015年9月12日),有待文件处理。

票数 1
EN

Stack Overflow用户

发布于 2015-12-30 02:43:49

确保在调用getServiceHealth(req,res)之前添加了侦听器;

代码语言:javascript
复制
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);
  });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32359576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档