Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用node mock http测试服务时不发出任何事件_Javascript_Node.js_Unit Testing_Mocking - Fatal编程技术网

Javascript 使用node mock http测试服务时不发出任何事件

Javascript 使用node mock http测试服务时不发出任何事件,javascript,node.js,unit-testing,mocking,Javascript,Node.js,Unit Testing,Mocking,我想通过调用它的控制器来测试一个简单的服务。我想我应该使用创建一个模拟请求,并查看响应的结果。然而,尽管有所有的文档和示例代码,我还是无法得到发出任何事件(“end”、“send”甚至“error”)的响应,因此无法知道何时测试输出 下面是一个简单的函数(使用Express 4.*): 这是我的测试(茉莉): 我完成此测试的唯一方法(不抛出超时错误)是取消对setTimeout行的注释-显然不是正确的方法。当我这样做时,res中的数据正是我所期望的-这意味着除了事件触发之外,一切都正常 我必须做

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

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

这是我的测试(茉莉):

我完成此测试的唯一方法(不抛出超时错误)是取消对
setTimeout
行的注释-显然不是正确的方法。当我这样做时,
res
中的数据正是我所期望的-这意味着除了事件触发之外,一切都正常

我必须做什么才能在
res
上触发事件

PS:有可能这是一些ES6进口雪纳根,我尝试了以下方法:

let res = httpMock.createResponse({EventEmitter: require('events').EventEmitter});
同样的结果


PPS:在repo上打开在调用getServiceHealth(req,res)之前确保已添加侦听器

在打开一个窗口后,我得到了答案: 属性名为
eventEmitter
-而不是
eventEmitter
。所以我应该写:


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


有点混乱,但我希望他们会修改文档以反映这一点。该问题仍然悬而未决(截至2015年12月29日)。感谢您的尝试,但这不是问题所在。我将用正确的答案结束这个问题。
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);
  });
});
let res = httpMock.createResponse({EventEmitter: require('events').EventEmitter});
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);
  });
});