Javascript 如何在“createReadStream”上模拟EventEmitter?
我正在尝试编写一个测试用例,用于测试以下代码导致的错误:Javascript 如何在“createReadStream”上模拟EventEmitter?,javascript,node.js,node-streams,Javascript,Node.js,Node Streams,我正在尝试编写一个测试用例,用于测试以下代码导致的错误: s3.getObject({ Bucket: mediaBucket, Key: mediaId, }).createReadStream() 我用一个虚拟S3对象做了一个测试,我使用MemoryStream来覆盖调用成功的情况。如何发出错误,以便编写一个测试,允许我在.on('error')函数(error)中测试行为 以下是我尝试过的,但没有成功: beforeEach(function () { var
s3.getObject({
Bucket: mediaBucket,
Key: mediaId,
}).createReadStream()
我用一个虚拟S3对象做了一个测试,我使用MemoryStream来覆盖调用成功的情况。如何发出错误,以便编写一个测试,允许我在.on('error')函数(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;
} }
},
};
只需像发射任何其他事件一样发射它:
stream.emit('error', new Error('Random error!'));
因此,上面的代码应该如下所示:
const s3 = {
getObject: () => {
return { createReadStream: () => {
process.nextTick(function() {
emitter.emit('error', new Error('whoops!'));
});
return emitter;
} }
},
};
我更新了我的问题,以显示我在做什么。我试图发出一个错误,很明显我做错了什么。你需要先返回发射器。然后使用
process.nextTick()
/setImmediate()
发出错误,因为这将给调用方留出时间附加错误事件处理程序。我更新了我的问题,以准确显示我在做什么。我试图发出一个错误,很明显我做错了什么。你需要先返回发射器。然后使用process.nextTick()
/setImmediate()
发出错误,因为这将使调用方有时间附加错误事件处理程序。