Skip to content

Commit

Permalink
Issue #29 - Mock network failure and timeout responses
Browse files Browse the repository at this point in the history
  • Loading branch information
peterox committed Mar 26, 2017
1 parent 7cfc19c commit b7bbf35
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 5 deletions.
29 changes: 24 additions & 5 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,13 @@ VERBS.concat('any').forEach(function(method) {
MockAdapter.prototype[methodName] = function(matcher, body) {
var _this = this;
var matcher = matcher === undefined ? /.*/ : matcher;
function reply(code, response, headers) {
var handler = [matcher, body, code, response, headers];
addHandler(method, _this.handlers, handler);
return _this;
}
return {
reply: function reply(code, response, headers) {
var handler = [matcher, body, code, response, headers];
addHandler(method, _this.handlers, handler);
return _this;
},
reply: reply,

replyOnce: function replyOnce(code, response, headers) {
var handler = [matcher, body, code, response, headers];
Expand All @@ -73,7 +74,25 @@ VERBS.concat('any').forEach(function(method) {
var handler = [matcher, body];
addHandler(method, _this.handlers, handler);
return _this;
},

networkError: function() {
reply(function(config) {
var error = new Error('Network Error');
error.config = config;
return Promise.reject(error);
});
},

timeout: function(timeout) {
reply(function(config) {
var error = new Error('timeout of ' + config.timeout + 'ms exceeded');
error.config = config;
error.code = 'ECONNABORTED';
return Promise.reject(error);
});
}

};
};
});
Expand Down
29 changes: 29 additions & 0 deletions test/network_error.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
var axios = require('axios');
var expect = require('chai').expect;

var MockAdapter = require('../src');

describe('networkError spec', function() {
var mock;

beforeEach(function() {
mock = new MockAdapter(axios);
});

afterEach(function() {
mock.restore();
});

it('mocks networkErrors', function() {
mock.onGet('/foo').networkError();

return axios.get('/foo')
.then(function() {
expect.fail('should not be called');
}, function(error) {
expect(error.config).to.exist;
expect(error.response).to.not.exist;
expect(error.message).to.equal('Network Error');
});
});
});
29 changes: 29 additions & 0 deletions test/timeout.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
var axios = require('axios');
var expect = require('chai').expect;

var MockAdapter = require('../src');

describe('timeout spec', function() {
var mock;

beforeEach(function() {
mock = new MockAdapter(axios);
});

afterEach(function() {
mock.restore();
});

it('mocks timeout response', function() {
mock.onGet('/foo').timeout();

return axios.get('/foo')
.then(function() {
expect.fail('should not be called');
}, function(error) {
expect(error.config).to.exist;
expect(error.code).to.equal('ECONNABORTED');
expect(error.message).to.equal('timeout of 0ms exceeded');
});
});
});

0 comments on commit b7bbf35

Please sign in to comment.