3
3
4
4
describe ( '$httpBackend' , function ( ) {
5
5
6
- var $backend , $browser , callbacks ,
6
+ var $backend , $browser , $jsonpCallbacks ,
7
7
xhr , fakeDocument , callback ;
8
8
9
-
10
9
beforeEach ( inject ( function ( $injector ) {
11
- callbacks = { counter : 0 } ;
10
+
12
11
$browser = $injector . get ( '$browser' ) ;
12
+
13
13
fakeDocument = {
14
14
$$scripts : [ ] ,
15
15
createElement : jasmine . createSpy ( 'createElement' ) . and . callFake ( function ( ) {
@@ -28,7 +28,27 @@ describe('$httpBackend', function() {
28
28
} )
29
29
}
30
30
} ;
31
- $backend = createHttpBackend ( $browser , createMockXhr , $browser . defer , callbacks , fakeDocument ) ;
31
+
32
+ $jsonpCallbacks = {
33
+ createCallback : function ( url ) {
34
+ $jsonpCallbacks [ url ] = function ( data ) {
35
+ $jsonpCallbacks [ url ] . called = true ;
36
+ $jsonpCallbacks [ url ] . data = data ;
37
+ } ;
38
+ return url ;
39
+ } ,
40
+ wasCalled : function ( callbackPath ) {
41
+ return $jsonpCallbacks [ callbackPath ] . called ;
42
+ } ,
43
+ getResponse : function ( callbackPath ) {
44
+ return $jsonpCallbacks [ callbackPath ] . data ;
45
+ } ,
46
+ removeCallback : function ( callbackPath ) {
47
+ delete $jsonpCallbacks [ callbackPath ] ;
48
+ }
49
+ } ;
50
+
51
+ $backend = createHttpBackend ( $browser , createMockXhr , $browser . defer , $jsonpCallbacks , fakeDocument ) ;
32
52
callback = jasmine . createSpy ( 'done' ) ;
33
53
} ) ) ;
34
54
@@ -235,7 +255,7 @@ describe('$httpBackend', function() {
235
255
236
256
it ( 'should call $xhrFactory with method and url' , function ( ) {
237
257
var mockXhrFactory = jasmine . createSpy ( 'mockXhrFactory' ) . and . callFake ( createMockXhr ) ;
238
- $backend = createHttpBackend ( $browser , mockXhrFactory , $browser . defer , callbacks , fakeDocument ) ;
258
+ $backend = createHttpBackend ( $browser , mockXhrFactory , $browser . defer , $jsonpCallbacks , fakeDocument ) ;
239
259
$backend ( 'GET' , '/some-url' , 'some-data' , noop ) ;
240
260
expect ( mockXhrFactory ) . toHaveBeenCalledWith ( 'GET' , '/some-url' ) ;
241
261
} ) ;
@@ -294,7 +314,7 @@ describe('$httpBackend', function() {
294
314
295
315
describe ( 'JSONP' , function ( ) {
296
316
297
- var SCRIPT_URL = / ( [ ^ \? ] * ) \? c b = a n g u l a r \. c a l l b a c k s \. ( .* ) / ;
317
+ var SCRIPT_URL = / ( [ ^ \? ] * ) \? c b = ( .* ) / ;
298
318
299
319
300
320
it ( 'should add script tag for JSONP request' , function ( ) {
@@ -310,25 +330,27 @@ describe('$httpBackend', function() {
310
330
url = script . src . match ( SCRIPT_URL ) ;
311
331
312
332
expect ( url [ 1 ] ) . toBe ( 'http://example.org/path' ) ;
313
- callbacks [ url [ 2 ] ] ( 'some-data' ) ;
333
+ $jsonpCallbacks [ url [ 2 ] ] ( 'some-data' ) ;
314
334
browserTrigger ( script , "load" ) ;
315
335
316
336
expect ( callback ) . toHaveBeenCalledOnce ( ) ;
317
337
} ) ;
318
338
319
339
320
340
it ( 'should clean up the callback and remove the script' , function ( ) {
341
+ spyOn ( $jsonpCallbacks , 'removeCallback' ) . and . callThrough ( ) ;
342
+
321
343
$backend ( 'JSONP' , 'http://example.org/path?cb=JSON_CALLBACK' , null , callback ) ;
322
344
expect ( fakeDocument . $$scripts . length ) . toBe ( 1 ) ;
323
345
324
346
325
347
var script = fakeDocument . $$scripts . shift ( ) ,
326
348
callbackId = script . src . match ( SCRIPT_URL ) [ 2 ] ;
327
349
328
- callbacks [ callbackId ] ( 'some-data' ) ;
350
+ $jsonpCallbacks [ callbackId ] ( 'some-data' ) ;
329
351
browserTrigger ( script , "load" ) ;
330
352
331
- expect ( callbacks [ callbackId ] ) . toBe ( angular . noop ) ;
353
+ expect ( $jsonpCallbacks . removeCallback ) . toHaveBeenCalledOnceWith ( callbackId ) ;
332
354
expect ( fakeDocument . body . removeChild ) . toHaveBeenCalledOnceWith ( script ) ;
333
355
} ) ;
334
356
@@ -343,7 +365,9 @@ describe('$httpBackend', function() {
343
365
} ) ;
344
366
345
367
346
- it ( 'should abort request on timeout and replace callback with noop' , function ( ) {
368
+ it ( 'should abort request on timeout and remove JSONP callback' , function ( ) {
369
+ spyOn ( $jsonpCallbacks , 'removeCallback' ) . and . callThrough ( ) ;
370
+
347
371
callback . and . callFake ( function ( status , response ) {
348
372
expect ( status ) . toBe ( - 1 ) ;
349
373
} ) ;
@@ -359,7 +383,7 @@ describe('$httpBackend', function() {
359
383
expect ( fakeDocument . $$scripts . length ) . toBe ( 0 ) ;
360
384
expect ( callback ) . toHaveBeenCalledOnce ( ) ;
361
385
362
- expect ( callbacks [ callbackId ] ) . toBe ( angular . noop ) ;
386
+ expect ( $jsonpCallbacks . removeCallback ) . toHaveBeenCalledOnceWith ( callbackId ) ;
363
387
} ) ;
364
388
365
389
0 commit comments