diff --git a/fetch.js b/fetch.js index eaa08ceda5203f6cd3475eeb07e8b3214648c286..ed70f1c42a2553d98fe559616209333c0b536639 100644 --- a/fetch.js +++ b/fetch.js @@ -76,9 +76,20 @@ throw new Error('Not implemented yet') } - this.blob = function() { - var rejected = consumed(this) - return rejected ? rejected : Promise.resolve(new Blob([this._body])) + var blobSupport = (function() { + try { + new Blob(); + return true + } catch(e) { + return false + } + })(); + + if (blobSupport) { + this.blob = function() { + var rejected = consumed(this) + return rejected ? rejected : Promise.resolve(new Blob([this._body])) + } } this.formData = function() { diff --git a/test/.jshintrc b/test/.jshintrc index 8202adff1c1c8b0901be55fed675e0388eaa9206..45ba1e95270fabe35cf2f1a620a30b261207ae38 100644 --- a/test/.jshintrc +++ b/test/.jshintrc @@ -21,6 +21,9 @@ "MockXHR": false, "QUnit": false, "fetch": false, + "Headers": false, + "Request": false, + "Response": false, "module": false, "test": false, "asyncTest": false, diff --git a/test/test.js b/test/test.js index 40f89da60989f378d730adee61cea2a88a4b7457..f17e6f7837c7475bba90fd2e9f0f59a4759dd1ec 100644 --- a/test/test.js +++ b/test/test.js @@ -1,12 +1,3 @@ -var blobSupport = (function() { - try { - new Blob(); - return true - } catch(e) { - return false - } -})(); - promiseTest('populates response body', 2, function() { return fetch('/hello').then(function(response) { equal(response.status, 200) @@ -72,13 +63,15 @@ promiseTest('resolves text promise', 1, function() { }) }) -promiseTest('parses form encoded response', 1, function() { - return fetch('/form').then(function(response) { - return response.formData() - }).then(function(form) { - ok(form instanceof FormData, 'Parsed a FormData object') +if (Response.prototype.formData) { + promiseTest('parses form encoded response', 1, function() { + return fetch('/form').then(function(response) { + return response.formData() + }).then(function(form) { + ok(form instanceof FormData, 'Parsed a FormData object') + }) }) -}) +} promiseTest('parses json response', 2, function() { return fetch('/json').then(function(response) { @@ -98,7 +91,7 @@ promiseTest('handles json parse error', 2, function() { }) }) -if (blobSupport) { +if (Response.prototype.blob) { promiseTest('resolves blob promise', 2, function() { return fetch('/hello').then(function(response) { return response.blob() @@ -121,7 +114,7 @@ promiseTest('post sets content-type header', 2, function() { }) }) -if (blobSupport) { +if (Response.prototype.blob) { promiseTest('rejects blob promise after body is consumed', 2, function() { return fetch('/hello').then(function(response) { ok(response.blob, 'Body does not implement blob') @@ -153,15 +146,17 @@ promiseTest('rejects text promise after body is consumed', 2, function() { }) }) -promiseTest('rejects formData promise after body is consumed', 2, function() { - return fetch('/json').then(function(response) { - ok(response.formData, 'Body does not implement formData') - response.formData() - return response.formData() - }).catch(function(error) { - ok(error instanceof TypeError, 'Promise rejected after body consumed') +if (Response.prototype.formData) { + promiseTest('rejects formData promise after body is consumed', 2, function() { + return fetch('/json').then(function(response) { + ok(response.formData, 'Body does not implement formData') + response.formData() + return response.formData() + }).catch(function(error) { + ok(error instanceof TypeError, 'Promise rejected after body consumed') + }) }) -}) +} promiseTest('supports HTTP PUT', 2, function() { return fetch('/request', {