From a3812e3439ab098845ad72dc832f38f3b4562d11 Mon Sep 17 00:00:00 2001 From: Tim van den Eijnden Date: Wed, 3 Feb 2016 21:27:07 +0100 Subject: [PATCH] added support for setting responseType to array buffer --- pretender.js | 7 ++++++- test/passthrough_test.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/pretender.js b/pretender.js index 822daa9..56b0f89 100644 --- a/pretender.js +++ b/pretender.js @@ -146,13 +146,18 @@ function interceptor(pretender) { var xhr = fakeXHR._passthroughRequest = new pretender._nativeXMLHttpRequest(); + if (fakeXHR.responseType === 'arraybuffer') { + lifecycleProps = ['readyState', 'response', 'status', 'statusText']; + xhr.responseType = fakeXHR.responseType; + } + // Use onload if the browser supports it if ('onload' in xhr) { evts.push('load'); } // add progress event for async calls - if (fakeXHR.async) { + if (fakeXHR.async && fakeXHR.responseType !== 'arraybuffer') { evts.push('progress'); } diff --git a/test/passthrough_test.js b/test/passthrough_test.js index 8833ccd..988c80e 100644 --- a/test/passthrough_test.js +++ b/test/passthrough_test.js @@ -91,6 +91,34 @@ describe('passthrough requests', function(config) { xhr.send('some data'); }); + asyncTest('asynchronous request with pass-through and ' + + 'arraybuffer 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, 'arraybuffer'); + 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 = 'arraybuffer'; + xhr.send(); + }); + asyncTest('synchronous request does not have timeout, withCredentials and onprogress event', function(assert) { var pretender = this.pretender; function testXHR() {