diff --git a/lib/interceptor.js b/lib/interceptor.js index 8c79b2d80..1b273fd6b 100644 --- a/lib/interceptor.js +++ b/lib/interceptor.js @@ -442,13 +442,17 @@ module.exports = class Interceptor { markConsumed() { this.interceptionCounter++ - remove(this) - - if ((this.scope.shouldPersist() || this.counter > 0) && this.filePath) { + if ( + (this.scope.shouldPersist() || this.counter > 0) && + this.interceptionCounter > 1 && + this.filePath + ) { this.body = fs.createReadStream(this.filePath) this.body.pause() } + remove(this) + if (!this.scope.shouldPersist() && this.counter < 1) { this.scope.remove(this._key, this) } diff --git a/tests/test_reply_with_file.js b/tests/test_reply_with_file.js index 4adbb8cde..639abd688 100644 --- a/tests/test_reply_with_file.js +++ b/tests/test_reply_with_file.js @@ -2,7 +2,9 @@ // Tests for `.replyWithFile()`. +const fs = require('fs') const path = require('path') +const sinon = require('sinon') const { expect } = require('chai') const proxyquire = require('proxyquire').preserveCache() const nock = require('..') @@ -39,6 +41,29 @@ describe('`replyWithFile()`', () => { scope.done() }) + it('reply with file with repeated', async () => { + sinon.spy(fs) + + const scope = nock('http://example.test') + .get('/') + .times(2) + .replyWithFile(200, binaryFilePath, { + 'content-encoding': 'gzip', + }) + + const response1 = await got('http://example.test/') + expect(response1.statusCode).to.equal(200) + expect(response1.body).to.have.lengthOf(20) + + const response2 = await got('http://example.test/') + expect(response2.statusCode).to.equal(200) + expect(response2.body).to.have.lengthOf(20) + + expect(fs.createReadStream.callCount).to.equal(2) + + scope.done() + }) + describe('with no fs', () => { const { Scope } = proxyquire('../lib/scope', { './interceptor': proxyquire('../lib/interceptor', {