Comment tester Angular2 du routeur.naviguer?

J'ai couru en manque <router-outlet> messages dans d'autres tests unitaires, mais juste pour avoir un joli exemple isolé, j'ai créé un AuthGuard qui vérifie si un utilisateur est connecté pour certaines actions.

C'est le code:

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    if (!this.authService.isLoggedIn()) {
        this.router.navigate(['/login']);
        return false;
    }
    return true;
}

Maintenant, je veux écrire un test unitaire pour cela.

C'est comment j'ai commencer mon test:

beforeEach(() => {
    TestBed.configureTestingModule({
        imports: [
            RouterTestingModule.withRoutes([
                {
                    path: 'login',
                    component: DummyComponent
                }
            ])
        ],
        declarations: [
            DummyComponent
        ],
        providers: [
            AuthGuardService,
            {
                provide: AuthService,
                useClass: MockAuthService
            }
        ]
    });
});

J'ai créé un DummyComponent qui ne fait rien.
Maintenant mon test. Prétendre que le service renvoie la valeur false et qu'il déclenche des this.router.navigate(['/login']):

it('should not let users pass when not logged in', (): void => {
    expect(authGuardService.canActivate(<any>{}, <any>{})).toBe(false);
});

Ce lève une exception avec "Impossible de trouver le courant principal à charge".
Évidemment, je peux utiliser toThrow() au lieu de toBe(false), mais qui ne vous semble pas très sensible à la solution. Depuis que je suis en essais un des services proposés ici, il n'y a pas de modèle où je peux mettre la <router-outlet> tag. Je pourrais en dérision le routeur et faire mon propre naviguer fonction, mais alors quel est le point de RouterTestingModule? Peut-être même vous voulez vérifier que la navigation travaillé.

Salut pouvez-vous fournir votre fichier de spécification de la connexion de la garde. Il serait utile pour moi de commencer à écrire des cas de test.
Pour ce que ça vaut, je partage votre frustration. Ne pouvez pas trouver un seul exemple de RouterTestingModule qui fonctionne réellement...

OriginalL'auteur Bart | 2016-10-28