diff --git a/pretender.js b/pretender.js index 56b0f89..085f907 100644 --- a/pretender.js +++ b/pretender.js @@ -146,18 +146,18 @@ function interceptor(pretender) { var xhr = fakeXHR._passthroughRequest = new pretender._nativeXMLHttpRequest(); - if (fakeXHR.responseType === 'arraybuffer') { + if (fakeXHR.responseType === 'arraybuffer' || fakeXHR.responseType === 'blob') { lifecycleProps = ['readyState', 'response', 'status', 'statusText']; xhr.responseType = fakeXHR.responseType; } // Use onload if the browser supports it - if ('onload' in xhr) { + if ('onload' in xhr && fakeXHR.responseType !== 'blob') { evts.push('load'); } // add progress event for async calls - if (fakeXHR.async && fakeXHR.responseType !== 'arraybuffer') { + if (fakeXHR.async && fakeXHR.responseType !== 'arraybuffer' && fakeXHR.responseType !== 'blob') { evts.push('progress'); } diff --git a/test/passthrough_test.js b/test/passthrough_test.js index 988c80e..b349778 100644 --- a/test/passthrough_test.js +++ b/test/passthrough_test.js @@ -119,6 +119,34 @@ describe('passthrough requests', function(config) { xhr.send(); }); + asyncTest('asynchronous request with pass-through and ' + + 'blob as responseType', function(assert) { + var pretender = this.pretender; + function testXHR() { + this.pretender = pretender; + this.open = function() {}; + this.setRequestHeader = function() {}; + this.upload = {}; + this.responseType = ''; + this.send = { + pretender: pretender, + apply: function(xhr, argument) { + assert.equal(xhr.responseType, 'blob'); + this.pretender.resolve(xhr); + QUnit.start(); + } + }; + } + pretender._nativeXMLHttpRequest = testXHR; + + pretender.get('/some/path', pretender.passthrough); + + var xhr = new window.XMLHttpRequest(); + xhr.open('GET', '/some/path'); + xhr.responseType = 'blob'; + xhr.send(); + }); + asyncTest('synchronous request does not have timeout, withCredentials and onprogress event', function(assert) { var pretender = this.pretender; function testXHR() {