1
1
describe ( '$httpBackend' , function ( ) {
2
2
3
3
var $backend , $browser , callbacks ,
4
- xhr , fakeBody , callback ;
4
+ xhr , fakeDocument , callback ;
5
5
6
6
// TODO(vojta): should be replaced by $defer mock
7
7
function fakeTimeout ( fn , delay ) {
@@ -21,8 +21,24 @@ describe('$httpBackend', function() {
21
21
beforeEach ( inject ( function ( $injector ) {
22
22
callbacks = { counter : 0 } ;
23
23
$browser = $injector . get ( '$browser' ) ;
24
- fakeBody = { removeChild : jasmine . createSpy ( 'body.removeChild' ) } ;
25
- $backend = createHttpBackend ( $browser , MockXhr , fakeTimeout , callbacks , fakeBody ) ;
24
+ fakeDocument = {
25
+ $$scripts : [ ] ,
26
+ createElement : jasmine . createSpy ( 'createElement' ) . andCallFake ( function ( ) {
27
+ return { } ;
28
+ } ) ,
29
+ body : {
30
+ appendChild : jasmine . createSpy ( 'body.appendChid' ) . andCallFake ( function ( script ) {
31
+ fakeDocument . $$scripts . push ( script ) ;
32
+ } ) ,
33
+ removeChild : jasmine . createSpy ( 'body.removeChild' ) . andCallFake ( function ( script ) {
34
+ var index = indexOf ( fakeDocument . $$scripts , script ) ;
35
+ if ( index != - 1 ) {
36
+ fakeDocument . $$scripts . splice ( index , 1 ) ;
37
+ }
38
+ } )
39
+ }
40
+ } ;
41
+ $backend = createHttpBackend ( $browser , MockXhr , fakeTimeout , callbacks , fakeDocument ) ;
26
42
callback = jasmine . createSpy ( 'done' ) ;
27
43
} ) ) ;
28
44
@@ -131,32 +147,44 @@ describe('$httpBackend', function() {
131
147
} ) ;
132
148
133
149
$backend ( 'JSONP' , 'http://example.org/path?cb=JSON_CALLBACK' , null , callback ) ;
134
- expect ( $browser . $$scripts . length ) . toBe ( 1 ) ;
150
+ expect ( fakeDocument . $$scripts . length ) . toBe ( 1 ) ;
135
151
136
- var script = $browser . $$scripts . shift ( ) ,
137
- url = script . url . match ( SCRIPT_URL ) ;
152
+ var script = fakeDocument . $$scripts . shift ( ) ,
153
+ url = script . src . match ( SCRIPT_URL ) ;
138
154
139
155
expect ( url [ 1 ] ) . toBe ( 'http://example.org/path' ) ;
140
156
callbacks [ url [ 2 ] ] ( 'some-data' ) ;
141
- script . done ( ) ;
157
+
158
+ if ( script . onreadystatechange ) {
159
+ script . readyState = 'complete' ;
160
+ script . onreadystatechange ( ) ;
161
+ } else {
162
+ script . onload ( )
163
+ }
142
164
143
165
expect ( callback ) . toHaveBeenCalledOnce ( ) ;
144
166
} ) ;
145
167
146
168
147
169
it ( 'should clean up the callback and remove the script' , function ( ) {
148
170
$backend ( 'JSONP' , 'http://example.org/path?cb=JSON_CALLBACK' , null , callback ) ;
149
- expect ( $browser . $$scripts . length ) . toBe ( 1 ) ;
171
+ expect ( fakeDocument . $$scripts . length ) . toBe ( 1 ) ;
172
+
150
173
151
- var script = $browser . $$scripts . shift ( ) ,
152
- callbackId = script . url . match ( SCRIPT_URL ) [ 2 ] ;
174
+ var script = fakeDocument . $$scripts . shift ( ) ,
175
+ callbackId = script . src . match ( SCRIPT_URL ) [ 2 ] ;
153
176
154
177
callbacks [ callbackId ] ( 'some-data' ) ;
155
- script . done ( ) ;
178
+
179
+ if ( script . onreadystatechange ) {
180
+ script . readyState = 'complete' ;
181
+ script . onreadystatechange ( ) ;
182
+ } else {
183
+ script . onload ( )
184
+ }
156
185
157
186
expect ( callbacks [ callbackId ] ) . toBeUndefined ( ) ;
158
- expect ( fakeBody . removeChild ) . toHaveBeenCalledOnce ( ) ;
159
- expect ( fakeBody . removeChild ) . toHaveBeenCalledWith ( script ) ;
187
+ expect ( fakeDocument . body . removeChild ) . toHaveBeenCalledOnceWith ( script ) ;
160
188
} ) ;
161
189
162
190
@@ -167,21 +195,26 @@ describe('$httpBackend', function() {
167
195
} ) ;
168
196
169
197
$backend ( 'JSONP' , 'http://example.org/path?cb=JSON_CALLBACK' , null , callback ) ;
170
- expect ( $browser . $$scripts . length ) . toBe ( 1 ) ;
171
-
172
- $browser . $$scripts . shift ( ) . done ( ) ;
198
+ expect ( fakeDocument . $$scripts . length ) . toBe ( 1 ) ;
199
+
200
+ var script = fakeDocument . $$scripts . shift ( ) ;
201
+ if ( script . onreadystatechange ) {
202
+ script . readyState = 'complete' ;
203
+ script . onreadystatechange ( ) ;
204
+ } else {
205
+ script . onload ( )
206
+ }
173
207
expect ( callback ) . toHaveBeenCalledOnce ( ) ;
174
208
} ) ;
175
209
176
210
177
211
it ( 'should set url to current location if not specified or empty string' , function ( ) {
178
212
$backend ( 'JSONP' , undefined , null , callback ) ;
179
- expect ( $browser . $$scripts [ 0 ] . url ) . toBe ( $browser . url ( ) ) ;
180
- $browser . $$scripts . shift ( ) ;
213
+ expect ( fakeDocument . $$scripts [ 0 ] . src ) . toBe ( $browser . url ( ) ) ;
214
+ fakeDocument . $$scripts . shift ( ) ;
181
215
182
216
$backend ( 'JSONP' , '' , null , callback ) ;
183
- expect ( $browser . $$scripts [ 0 ] . url ) . toBe ( $browser . url ( ) ) ;
184
- $browser . $$scripts . shift ( ) ;
217
+ expect ( fakeDocument . $$scripts [ 0 ] . src ) . toBe ( $browser . url ( ) ) ;
185
218
} ) ;
186
219
187
220
0 commit comments