2016-09-19 3 views
0

Ich versuche, einen Testfall für zu schreiben, wenn ein Fehler als Ergebnis dieses Codes ausgegeben wird:Wie spottet man einen EventEmitter auf `createReadStream`?

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

ich einen Test mit einem Dummy-S3-Objekt habe, und ich bin mit Memorystream zu Fälle abdecken, in denen der Anruf erfolgreich ist. Wie kann ich einen Fehler ausgeben, sodass ich einen Test schreiben kann, der es mir ermöglicht, das Verhalten in .on('error') function(error).. zu testen?

Hier ist, was ich versucht habe, ohne Erfolg:

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

Antwort

2

emittieren es einfach wie jedes andere Ereignis:

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

der obige Code sollte wie also aussehen:

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

Ich habe meine Frage aktualisiert, um genau zu zeigen, was ich mache. Ich versuche einen Fehler zu erzeugen, ich mache nur etwas falsch. –

+0

Sie müssen * zuerst den Sender * zurückgeben. Verwenden Sie dann 'process.nextTick()'/'setImmediate()', um den Fehler zu senden, da dies dem Aufrufer Zeit gibt, den Ereignishandler 'error' anzuhängen. – mscdex

+0

danke, das hat den Trick gemacht! –

Verwandte Themen