@@ -14,7 +14,10 @@ import {
14
14
} from '../src/index' ;
15
15
import 'rxjs/add/operator/filter' ;
16
16
import 'rxjs/add/operator/first' ;
17
+ import 'rxjs/add/operator/mapTo' ;
18
+ import 'rxjs/add/operator/take' ;
17
19
import 'rxjs/add/operator/toPromise' ;
20
+ import { of } from 'rxjs/observable/of' ;
18
21
19
22
describe ( 'integration spec' , ( ) => {
20
23
it ( 'should work' , done => {
@@ -370,6 +373,38 @@ describe('integration spec', () => {
370
373
} ) ;
371
374
} ) ;
372
375
} ) ;
376
+
377
+ it ( 'should support event during an async canActivate guard' , done => {
378
+ createTestModule ( {
379
+ reducers : { routerReducer } ,
380
+ canActivate : ( ) => {
381
+ store . dispatch ( { type : 'USER_EVENT' } ) ;
382
+ return store . take ( 1 ) . mapTo ( true ) ;
383
+ } ,
384
+ } ) ;
385
+
386
+ const router : Router = TestBed . get ( Router ) ;
387
+ const store : Store < any > = TestBed . get ( Store ) ;
388
+ const log = logOfRouterAndStore ( router , store ) ;
389
+
390
+ router
391
+ . navigateByUrl ( '/' )
392
+ . then ( ( ) => {
393
+ log . splice ( 0 ) ;
394
+ return router . navigateByUrl ( 'next' ) ;
395
+ } )
396
+ . then ( ( ) => {
397
+ expect ( log ) . toEqual ( [
398
+ { type : 'router' , event : 'NavigationStart' , url : '/next' } ,
399
+ { type : 'router' , event : 'RoutesRecognized' , url : '/next' } ,
400
+ { type : 'store' , state : undefined } , // after ROUTER_NAVIGATION
401
+ { type : 'store' , state : undefined } , // after USER_EVENT
402
+ { type : 'router' , event : 'NavigationEnd' , url : '/next' } ,
403
+ ] ) ;
404
+
405
+ done ( ) ;
406
+ } ) ;
407
+ } ) ;
373
408
} ) ;
374
409
375
410
function createTestModule (
0 commit comments