From f0c45ace7c1fd1f80a6eb23864f8b2d2c21d34ad Mon Sep 17 00:00:00 2001 From: Rhys Evans Date: Sun, 23 Sep 2018 17:44:45 +0100 Subject: [PATCH] added test for readable streams --- test/server.js | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/test/server.js b/test/server.js index 0b8c6842..30bbf1c8 100644 --- a/test/server.js +++ b/test/server.js @@ -1,6 +1,7 @@ const fetchMock = require('../src/server.js'); const expect = require('chai').expect; const http = require('http'); +const sinon = require('sinon'); const { promisify } = require('util'); describe('nodejs tests', () => { @@ -19,7 +20,8 @@ describe('nodejs tests', () => { require('./runner')(fetchMock, global, require('node-fetch')); - describe('support for Buffers', () => { + describe('support for nodejs body types', () => { + afterEach(() => fetchMock.reset()); it('can respond with a buffer', () => { fetchMock.mock(/a/, new Buffer('buffer'), { sendAsJson: false }); return fetchMock @@ -29,5 +31,28 @@ describe('nodejs tests', () => { expect(txt).to.equal('buffer'); }); }); + + it('can respond with a readable stream', done => { + const { Readable, Writable } = require('stream'); + const readable = new Readable(); + const write = sinon.stub().callsFake((chunk, enc, cb) => { + cb(); + }); + const writable = new Writable({ + write + }); + readable.push('response string'); + readable.push(null); + + fetchMock.mock(/a/, readable, { sendAsJson: false }); + fetchMock.fetchHandler('http://a.com').then(res => { + res.body.pipe(writable); + }); + + writable.on('finish', () => { + expect(write.args[0][0].toString('utf8')).to.equal('response string'); + done(); + }); + }); }); });