javascript - 使用 node-mocks-http 测试没有发出事件的服务

标签 javascript node.js unit-testing mocking

我想通过调用其 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/

相关文章:

javascript - Highchart 在 IE8 中不显示系列组

swift - 如何为 completionHandler 引发错误?

java - 单元测试库是否存在

node.js - 如何从 Nodejs 中的同步 Azure 函数返回结果

java - Gradle "test"任务没有在应该失败的地方失败

javascript - 没有 Canvas 的 HTML 动画序列

javascript - 没有公共(public) block 或动态加载的多个入口点

javascript - 使用作用域 JQuery 插件进行 Bootstrap

node.js - 如何使用参数加载外部文件

javascript - 在微服务之间共享代码——在这种情况下是否合理?