javascript - 如何模拟 `createReadStream` 上的 EventEmitter?

标签 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!')) }
     },
};

最佳答案

像处理任何其他事件一样发出它:

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

所以,上面的代码应该是这样的:

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

关于javascript - 如何模拟 `createReadStream` 上的 EventEmitter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39579525/

相关文章:

javascript - 使用 Javascript 重用 Azure Functions 的数据库连接

node.js - 如何在node js/sails js中分割输入文件(图像)流?

Node.js 转换文件流并写入同一文件会导致空文件

javascript - 序列化已编辑的 JSDOM 文档?

node.js - 服务器发送事件或 Websockets 的 Aws 负载均衡器

node.js - 在sequelize中双重包含,node.js

node.js - ffmpeg mp3 通过 Node js 流式传输

javascript - 如何在单击主体和按钮 JS 时删除类

javascript - 提交表单以选择 option.onClick

javascript - jQuery Live 在一个网站上搜索两次