From 1629a026da17a1e1d8999a02f3fe6b6b60aaac9c Mon Sep 17 00:00:00 2001 From: mzabriskie Date: Sun, 12 Apr 2015 16:07:32 -0600 Subject: [PATCH] Adding X-Requested-With header --- lib/adapters/xhr.js | 3 + test/specs/headers.spec.js | 104 +++++++++++++++ .../{wrapper.spec.js => requests.spec.js} | 118 +++--------------- 3 files changed, 127 insertions(+), 98 deletions(-) create mode 100644 test/specs/headers.spec.js rename test/specs/{wrapper.spec.js => requests.spec.js} (63%) diff --git a/lib/adapters/xhr.js b/lib/adapters/xhr.js index bb9d273..dc5c6d0 100644 --- a/lib/adapters/xhr.js +++ b/lib/adapters/xhr.js @@ -25,6 +25,9 @@ module.exports = function xhrAdapter(resolve, reject, config) { config.headers || {} ); + // Indicate that request is being made with XHR + requestHeaders['X-Requested-With'] = 'XMLHttpRequest'; + if (utils.isFormData(data)) { delete requestHeaders['Content-Type']; // Let the browser set it } diff --git a/test/specs/headers.spec.js b/test/specs/headers.spec.js new file mode 100644 index 0000000..98d3970 --- /dev/null +++ b/test/specs/headers.spec.js @@ -0,0 +1,104 @@ +var axios = require('../../index'); + +describe('headers', function () { + beforeEach(function () { + jasmine.Ajax.install(); + }); + + afterEach(function () { + jasmine.Ajax.uninstall(); + }); + + it('should add X-Requested-With header', function (done) { + var request; + + axios({ + url: '/foo' + }); + + setTimeout(function () { + request = jasmine.Ajax.requests.mostRecent(); + + expect(request.requestHeaders['X-Requested-With']).toEqual('XMLHttpRequest'); + done(); + }); + }); + + it('should default common headers', function (done) { + var request; + var headers = axios.defaults.headers.common; + + axios({ + url: '/foo' + }); + + setTimeout(function () { + request = jasmine.Ajax.requests.mostRecent(); + + for (var key in headers) { + if (headers.hasOwnProperty(key)) { + expect(request.requestHeaders[key]).toEqual(headers[key]); + } + } + done(); + }, 0); + }); + + it('should add extra headers for post', function (done) { + var request; + var headers = axios.defaults.headers.common; + + axios({ + method: 'post', + url: '/foo', + data: 'fizz=buzz' + }); + + setTimeout(function () { + request = jasmine.Ajax.requests.mostRecent(); + + for (var key in headers) { + if (headers.hasOwnProperty(key)) { + expect(request.requestHeaders[key]).toEqual(headers[key]); + } + } + done(); + }, 0); + }); + + it('should use application/json when posting an object', function (done) { + var request; + + axios({ + url: '/foo/bar', + method: 'post', + data: { + firstName: 'foo', + lastName: 'bar' + } + }); + + setTimeout(function () { + request = jasmine.Ajax.requests.mostRecent(); + + expect(request.requestHeaders['Content-Type']).toEqual('application/json;charset=utf-8'); + done(); + }, 0); + }); + + it('should remove content-type if data is empty', function (done) { + var request; + + axios({ + method: 'post', + url: '/foo' + }); + + setTimeout(function () { + request = jasmine.Ajax.requests.mostRecent(); + + expect(request.requestHeaders['content-type']).toEqual(undefined); + done(); + }, 0); + }); +}); diff --git a/test/specs/wrapper.spec.js b/test/specs/requests.spec.js similarity index 63% rename from test/specs/wrapper.spec.js rename to test/specs/requests.spec.js index b404189..88bde87 100644 --- a/test/specs/wrapper.spec.js +++ b/test/specs/requests.spec.js @@ -1,6 +1,6 @@ var axios = require('../../index'); -describe('wrapper', function () { +describe('requests', function () { beforeEach(function () { jasmine.Ajax.install(); }); @@ -24,65 +24,35 @@ describe('wrapper', function () { }, 0); }); - it('should default common headers', function (done) { - var request; - var headers = axios.defaults.headers.common; + it('should supply correct response', function (done) { + var request, response; axios({ + method: 'post', url: '/foo' + }).then(function (res) { + response = res; }); setTimeout(function () { request = jasmine.Ajax.requests.mostRecent(); - for (var key in headers) { - if (headers.hasOwnProperty(key)) { - expect(request.requestHeaders[key]).toEqual(headers[key]); + request.respondWith({ + status: 200, + statusText: 'OK', + responseText: '{"foo": "bar"}', + headers: { + 'Content-Type': 'application/json' } - } - done(); - }, 0); - }); + }); - it('should add extra headers for post', function (done) { - var request; - var headers = axios.defaults.headers.common; - - axios({ - method: 'post', - url: '/foo', - data: 'fizz=buzz' - }); - - setTimeout(function () { - request = jasmine.Ajax.requests.mostRecent(); - - for (var key in headers) { - if (headers.hasOwnProperty(key)) { - expect(request.requestHeaders[key]).toEqual(headers[key]); - } - } - done(); - }, 0); - }); - - it('should use application/json when posting an object', function (done) { - var request; - - axios({ - url: '/foo/bar', - method: 'post', - data: { - firstName: 'foo', - lastName: 'bar' - } - }); - - setTimeout(function () { - request = jasmine.Ajax.requests.mostRecent(); - - expect(request.requestHeaders['Content-Type']).toEqual('application/json;charset=utf-8'); - done(); + setTimeout(function () { + expect(response.data.foo).toEqual('bar'); + expect(response.status).toEqual(200); + expect(response.statusText).toEqual('OK'); + expect(response.headers['content-type']).toEqual('application/json'); + done(); + }, 0); }, 0); }); @@ -132,54 +102,6 @@ describe('wrapper', function () { }, 0); }); - it('should remove content-type if data is empty', function (done) { - var request; - - axios({ - method: 'post', - url: '/foo' - }); - - setTimeout(function () { - request = jasmine.Ajax.requests.mostRecent(); - - expect(request.requestHeaders['content-type']).toEqual(undefined); - done(); - }, 0); - }); - - it('should supply correct response', function (done) { - var request, response; - - axios({ - method: 'post', - url: '/foo' - }).then(function (res) { - response = res; - }); - - setTimeout(function () { - request = jasmine.Ajax.requests.mostRecent(); - - request.respondWith({ - status: 200, - statusText: 'OK', - responseText: '{"foo": "bar"}', - headers: { - 'Content-Type': 'application/json' - } - }); - - setTimeout(function () { - expect(response.data.foo).toEqual('bar'); - expect(response.status).toEqual(200); - expect(response.statusText).toEqual('OK'); - expect(response.headers['content-type']).toEqual('application/json'); - done(); - }, 0); - }, 0); - }); - it('should support array buffer response', function (done) { var request, response;