@@ -2,8 +2,10 @@ import { expect } from 'chai';
2
2
import * as sinon from 'sinon' ;
3
3
import * as Rx from 'rxjs/Rx' ;
4
4
import { root } from 'rxjs/util/root' ;
5
+ import { TestScheduler } from 'rxjs/testing' ;
5
6
6
7
declare const global : any ;
8
+ declare const rxTestScheduler : TestScheduler ;
7
9
8
10
/** @test {ajax} */
9
11
describe ( 'Observable.ajax' , ( ) => {
@@ -381,6 +383,39 @@ describe('Observable.ajax', () => {
381
383
} ) ;
382
384
} ) ;
383
385
386
+ it ( 'should error on timeout of asynchronous request' , ( ) => {
387
+ const obj : Rx . AjaxRequest = {
388
+ url : '/flibbertyJibbet' ,
389
+ responseType : 'text' ,
390
+ timeout : 10
391
+ } ;
392
+
393
+ Rx . Observable . ajax ( obj )
394
+ . subscribe ( ( x : any ) => {
395
+ throw 'should not have been called' ;
396
+ } , ( e ) => {
397
+ expect ( e . status ) . to . equal ( 0 ) ;
398
+ expect ( e . xhr . method ) . to . equal ( 'GET' ) ;
399
+ expect ( e . xhr . async ) . to . equal ( true ) ;
400
+ expect ( e . xhr . timeout ) . to . equal ( 10 ) ;
401
+ expect ( e . xhr . responseType ) . to . equal ( 'text' ) ;
402
+ } ) ;
403
+
404
+ const request = MockXMLHttpRequest . mostRecent ;
405
+
406
+ expect ( request . url ) . to . equal ( '/flibbertyJibbet' ) ;
407
+
408
+ rxTestScheduler . schedule ( ( ) => {
409
+ request . respondWith ( {
410
+ 'status' : 200 ,
411
+ 'contentType' : 'text/plain' ,
412
+ 'responseText' : 'Wee! I am text!'
413
+ } ) ;
414
+ } , 1000 ) ;
415
+
416
+ rxTestScheduler . flush ( ) ;
417
+ } ) ;
418
+
384
419
it ( 'should create a synchronous request' , ( ) => {
385
420
const obj : Rx . AjaxRequest = {
386
421
url : '/flibbertyJibbet' ,
@@ -1030,8 +1065,20 @@ class MockXMLHttpRequest {
1030
1065
MockXMLHttpRequest . requests . push ( this ) ;
1031
1066
}
1032
1067
1068
+ timeout : number ;
1069
+
1033
1070
send ( data : any ) : void {
1034
1071
this . data = data ;
1072
+ if ( this . timeout && this . timeout > 0 ) {
1073
+ setTimeout ( ( ) => {
1074
+ if ( this . readyState != 4 ) {
1075
+ this . readyState = 4 ;
1076
+ this . status = 0 ;
1077
+ this . triggerEvent ( 'readystatechange' ) ;
1078
+ this . triggerEvent ( 'timeout' ) ;
1079
+ }
1080
+ } , this . timeout ) ;
1081
+ }
1035
1082
}
1036
1083
1037
1084
open ( method : any , url : any , async : any , user : any , password : any ) : void {
@@ -1041,7 +1088,7 @@ class MockXMLHttpRequest {
1041
1088
this . user = user ;
1042
1089
this . password = password ;
1043
1090
this . readyState = 1 ;
1044
- this . triggerEvent ( 'readyStateChange ' ) ;
1091
+ this . triggerEvent ( 'readystatechange ' ) ;
1045
1092
const originalProgressHandler = this . upload . onprogress ;
1046
1093
Object . defineProperty ( this . upload , 'progress' , {
1047
1094
get ( ) {
@@ -1054,24 +1101,6 @@ class MockXMLHttpRequest {
1054
1101
this . requestHeaders [ key ] = value ;
1055
1102
}
1056
1103
1057
- addEventListener ( name : string , handler : any ) : void {
1058
- this . eventHandlers . push ( { name : name , handler : handler } ) ;
1059
- }
1060
-
1061
- removeEventListener ( name : string , handler : any ) : void {
1062
- for ( let i = this . eventHandlers . length - 1 ; i -- ; ) {
1063
- let eh = this . eventHandlers [ i ] ;
1064
- if ( eh . name === name && eh . handler === handler ) {
1065
- this . eventHandlers . splice ( i , 1 ) ;
1066
- }
1067
- }
1068
- }
1069
-
1070
- throwError ( err : any ) : void {
1071
- // TODO: something better with errors
1072
- this . triggerEvent ( 'error' ) ;
1073
- }
1074
-
1075
1104
protected jsonResponseValue ( response : any ) {
1076
1105
try {
1077
1106
this . response = JSON . parse ( response . responseText ) ;
@@ -1119,17 +1148,11 @@ class MockXMLHttpRequest {
1119
1148
1120
1149
triggerEvent ( name : any , eventObj ?: any ) : void {
1121
1150
// TODO: create a better default event
1122
- const e : any = eventObj || { } ;
1151
+ const e : any = eventObj || { type : name } ;
1123
1152
1124
1153
if ( this [ 'on' + name ] ) {
1125
1154
this [ 'on' + name ] ( e ) ;
1126
1155
}
1127
-
1128
- this . eventHandlers . forEach ( function ( eh ) {
1129
- if ( eh . name === name ) {
1130
- eh . handler . call ( this , e ) ;
1131
- }
1132
- } ) ;
1133
1156
}
1134
1157
1135
1158
triggerUploadEvent ( name : any , eventObj ?: any ) : void {
0 commit comments