Skip to content

Commit d08ed66

Browse files
authored
Merge pull request #121 from xemle/instantiate-interceptors-only-once
Instantiate interceptor only once
2 parents f1f0ec1 + 2788de7 commit d08ed66

File tree

2 files changed

+36
-7
lines changed

2 files changed

+36
-7
lines changed

lib/httpMock.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,17 @@ function mockTemplate() {
1515

1616
$provide.decorator('$http', ['$delegate', '$q', '$injector', function($http, $q, $injector) {
1717

18-
var interceptors = $httpProvider.interceptors;
18+
var interceptors = [];
1919

20-
function getInterceptor(interceptorExpression) {
20+
angular.forEach($httpProvider.interceptors, function(interceptorExpression) {
21+
var interceptor;
2122
if (angular.isString(interceptorExpression)) {
22-
return $injector.get(interceptorExpression);
23+
interceptor = $injector.get(interceptorExpression);
2324
} else {
24-
return $injector.invoke(interceptorExpression);
25+
interceptor = $injector.invoke(interceptorExpression);
2526
}
26-
}
27+
interceptors.push(interceptor);
28+
});
2729

2830
function transformData(data, headers, status, fns) {
2931
if (typeof fns === 'function') {
@@ -50,7 +52,7 @@ function mockTemplate() {
5052

5153
function getTransformedAndInterceptedRequestConfig(requestConfig) {
5254
for (var i = 0; i < interceptors.length; i++) {
53-
var interceptor = getInterceptor(interceptors[i]);
55+
var interceptor = interceptors[i];
5456

5557
if (interceptor.request) {
5658
$q.when(interceptor.request(requestConfig)).then(function(interceptedRequestConfig){
@@ -84,7 +86,7 @@ function mockTemplate() {
8486

8587
// Response interceptors are invoked in reverse order as per docs
8688
for (var i = interceptors.length - 1; i >= 0; i--) {
87-
var interceptor = getInterceptor(interceptors[i]);
89+
var interceptor = interceptors[i];
8890

8991
if (interceptor.response && statusIsSuccessful(response.status)) {
9092
$q.when(interceptor.response(response)).then(function(interceptedResponse){

tests/interceptors.test.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ describe('interceptors', function(){
4343
}
4444
});
4545

46+
$httpProvider.interceptors.push(function(){
47+
var count = 0;
48+
return {
49+
response: function(response){
50+
count++;
51+
response.headers['stateful-anonymous-response-count'] = count;
52+
53+
return response;
54+
}
55+
}
56+
});
57+
4658
$httpProvider.interceptors.push(['$q', function($q){
4759
return {
4860
request: function(config){
@@ -115,6 +127,21 @@ describe('interceptors', function(){
115127
});
116128
});
117129

130+
it('allows for intercepts through stateful anonymous factory', function(done){
131+
http({
132+
method: 'GET',
133+
url: 'test-url.com/anonymous-intercept'
134+
}).then(function(){
135+
return http({
136+
method: 'GET',
137+
url: 'test-url.com/anonymous-intercept'
138+
});
139+
}).then(function(response){
140+
expect(response.headers['stateful-anonymous-response-count']).toBeGreaterThan(1);
141+
done();
142+
});
143+
});
144+
118145
it('allows for intercepts that return a promise from a request', function(done){
119146
http({
120147
method: 'POST',

0 commit comments

Comments
 (0)