如何在`createReadStream`上模拟EventEmitter?

时间:2016-09-19 18:08:52

标签: javascript node.js node-streams

我正在尝试为此代码发出错误时编写测试用例:

s3.getObject({
    Bucket: mediaBucket,
    Key: mediaId,
  }).createReadStream()

我有一个虚拟S3对象的测试,我正在使用MemoryStream来覆盖调用成功的情况。我如何发出错误,所以我可以编写一个允许我在.on('error') function(error)..中测试行为的测试?

这是我尝试过的,没有成功:

beforeEach(function () {
   var emitter = new EventEmitter;
   const s3 = {
     getObject: () => {
       return { createReadStream: () => emitter.emit('error', new Error('Random error!')) }
     },
};

1 个答案:

答案 0 :(得分:3)

就像发生任何其他事件一样发射它:

stream.emit('error', new Error('Random error!'));

因此,上面的代码应如下所示:

const s3 = {
  getObject: () => {
    return { createReadStream: () => {
      process.nextTick(function() {
        emitter.emit('error', new Error('whoops!'));
      });
      return emitter;
    } }
  },
};