summaryrefslogtreecommitdiff
path: root/test/specs/interceptors.spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/specs/interceptors.spec.js')
-rw-r--r--test/specs/interceptors.spec.js273
1 files changed, 273 insertions, 0 deletions
diff --git a/test/specs/interceptors.spec.js b/test/specs/interceptors.spec.js
new file mode 100644
index 0000000..effbcde
--- /dev/null
+++ b/test/specs/interceptors.spec.js
@@ -0,0 +1,273 @@
+describe('interceptors', function () {
+ beforeEach(function () {
+ jasmine.Ajax.install();
+ });
+
+ afterEach(function () {
+ jasmine.Ajax.uninstall();
+ axios.interceptors.request.handlers = [];
+ axios.interceptors.response.handlers = [];
+ });
+
+ it('should add a request interceptor', function (done) {
+ axios.interceptors.request.use(function (config) {
+ config.headers.test = 'added by interceptor';
+ return config;
+ });
+
+ axios('/foo');
+
+ getAjaxRequest().then(function (request) {
+ request.respondWith({
+ status: 200,
+ responseText: 'OK'
+ });
+
+ expect(request.requestHeaders.test).toBe('added by interceptor');
+ done();
+ });
+ });
+
+ it('should add a request interceptor that returns a new config object', function (done) {
+ axios.interceptors.request.use(function () {
+ return {
+ url: '/bar',
+ method: 'post'
+ };
+ });
+
+ axios('/foo');
+
+ getAjaxRequest().then(function (request) {
+ expect(request.method).toBe('POST');
+ expect(request.url).toBe('/bar');
+ done();
+ });
+ });
+
+ it('should add a request interceptor that returns a promise', function (done) {
+ axios.interceptors.request.use(function (config) {
+ return new Promise(function (resolve) {
+ // do something async
+ setTimeout(function () {
+ config.headers.async = 'promise';
+ resolve(config);
+ }, 100);
+ });
+ });
+
+ axios('/foo');
+
+ getAjaxRequest().then(function (request) {
+ expect(request.requestHeaders.async).toBe('promise');
+ done();
+ });
+ });
+
+ it('should add multiple request interceptors', function (done) {
+ axios.interceptors.request.use(function (config) {
+ config.headers.test1 = '1';
+ return config;
+ });
+ axios.interceptors.request.use(function (config) {
+ config.headers.test2 = '2';
+ return config;
+ });
+ axios.interceptors.request.use(function (config) {
+ config.headers.test3 = '3';
+ return config;
+ });
+
+ axios('/foo');
+
+ getAjaxRequest().then(function (request) {
+ expect(request.requestHeaders.test1).toBe('1');
+ expect(request.requestHeaders.test2).toBe('2');
+ expect(request.requestHeaders.test3).toBe('3');
+ done();
+ });
+ });
+
+ it('should add a response interceptor', function (done) {
+ var response;
+
+ axios.interceptors.response.use(function (data) {
+ data.data = data.data + ' - modified by interceptor';
+ return data;
+ });
+
+ axios('/foo').then(function (data) {
+ response = data;
+ });
+
+ getAjaxRequest().then(function (request) {
+ request.respondWith({
+ status: 200,
+ responseText: 'OK'
+ });
+
+ setTimeout(function () {
+ expect(response.data).toBe('OK - modified by interceptor');
+ done();
+ }, 100);
+ });
+ });
+
+ it('should add a response interceptor that returns a new data object', function (done) {
+ var response;
+
+ axios.interceptors.response.use(function () {
+ return {
+ data: 'stuff'
+ };
+ });
+
+ axios('/foo').then(function (data) {
+ response = data;
+ });
+
+ getAjaxRequest().then(function (request) {
+ request.respondWith({
+ status: 200,
+ responseText: 'OK'
+ });
+
+ setTimeout(function () {
+ expect(response.data).toBe('stuff');
+ done();
+ }, 100);
+ });
+ });
+
+ it('should add a response interceptor that returns a promise', function (done) {
+ var response;
+
+ axios.interceptors.response.use(function (data) {
+ return new Promise(function (resolve) {
+ // do something async
+ setTimeout(function () {
+ data.data = 'you have been promised!';
+ resolve(data);
+ }, 10);
+ });
+ });
+
+ axios('/foo').then(function (data) {
+ response = data;
+ });
+
+ getAjaxRequest().then(function (request) {
+ request.respondWith({
+ status: 200,
+ responseText: 'OK'
+ });
+
+ setTimeout(function () {
+ expect(response.data).toBe('you have been promised!');
+ done();
+ }, 100);
+ });
+ });
+
+ it('should add multiple response interceptors', function (done) {
+ var response;
+
+ axios.interceptors.response.use(function (data) {
+ data.data = data.data + '1';
+ return data;
+ });
+ axios.interceptors.response.use(function (data) {
+ data.data = data.data + '2';
+ return data;
+ });
+ axios.interceptors.response.use(function (data) {
+ data.data = data.data + '3';
+ return data;
+ });
+
+ axios('/foo').then(function (data) {
+ response = data;
+ });
+
+ getAjaxRequest().then(function (request) {
+ request.respondWith({
+ status: 200,
+ responseText: 'OK'
+ });
+
+ setTimeout(function () {
+ expect(response.data).toBe('OK123');
+ done();
+ }, 100);
+ });
+ });
+
+ it('should allow removing interceptors', function (done) {
+ var response, intercept;
+
+ axios.interceptors.response.use(function (data) {
+ data.data = data.data + '1';
+ return data;
+ });
+ intercept = axios.interceptors.response.use(function (data) {
+ data.data = data.data + '2';
+ return data;
+ });
+ axios.interceptors.response.use(function (data) {
+ data.data = data.data + '3';
+ return data;
+ });
+
+ axios.interceptors.response.eject(intercept);
+
+ axios('/foo').then(function (data) {
+ response = data;
+ });
+
+ getAjaxRequest().then(function (request) {
+ request.respondWith({
+ status: 200,
+ responseText: 'OK'
+ });
+
+ setTimeout(function () {
+ expect(response.data).toBe('OK13');
+ done();
+ }, 100);
+ });
+ });
+
+ it('should execute interceptors before transformers', function (done) {
+ axios.interceptors.request.use(function (config) {
+ config.data.baz = 'qux';
+ return config;
+ });
+
+ axios.post('/foo', {
+ foo: 'bar'
+ });
+
+ getAjaxRequest().then(function (request) {
+ expect(request.params).toEqual('{"foo":"bar","baz":"qux"}');
+ done();
+ });
+ });
+
+ it('should modify base URL in request interceptor', function (done) {
+ var instance = axios.create({
+ baseURL: 'http://test.com/'
+ });
+
+ instance.interceptors.request.use(function (config) {
+ config.baseURL = 'http://rebase.com/';
+ return config;
+ });
+
+ instance.get('/foo');
+
+ getAjaxRequest().then(function (request) {
+ expect(request.url).toBe('http://rebase.com/foo');
+ done();
+ });
+ });
+});