2016-12-19 5 views
9

Извините, что задал этот вопрос. Но я не могу найти ни одного учебника по блогам или YouTube, написав проверку файла защиты canActivate. Также в официальной документации ничего не говорится.Как метод unit-test canActivate метод защиты углового2 с использованием жасмина?

любая помощь будет очень признательна.

+0

Что именно вы хотели бы проверить? Что метод 'canActivate()' в вашем охраннике действительно вызван или код, который находится внутри метода canActivate()? – AngularChef

ответ

14

так как никто не ответил на мой вопрос, поэтому я вставляю свой фрагмент кода для ссылки, чтобы помочь людям, которые могут получить эту ситуацию.

sampleLoggedIn.guard.ts

import {Injectable} from '@angular/core'; 
import {Router, CanActivate} from '@angular/router'; 
import {StorageService} from '../storage.service'; 

@Injectable() 
export class LoggedInGuard implements CanActivate { 
    constructor(private router: Router, private storageService: StorageService) { 
    } 

    /**Overriding canActivate to guard routes 
    * 
    * This method returns true if the user is not logged in 
    * @returns {boolean} 
    */ 
    canActivate() { 
     if (this.storageService.isLoggedIn) { 
      return true; 
     } else { 
      this.router.navigate(['home']); 
      return false; 
     } 
    } 
} 

sampleLoggedIn.guard.spec.ts

import {TestBed, async} from '@angular/core/testing'; 
import {FormsModule} from '@angular/forms'; 
import {HttpModule} from '@angular/http'; 
import {CommonModule} from '@angular/common'; 
import 'rxjs/Rx'; 
import 'rxjs/add/observable/throw'; 
import {Router} from '@angular/router'; 
import 'rxjs/add/operator/map'; 
import {LoggedInGuard} from './loggedin.guard'; 
import {StorageService} from '../storage.service'; 
import {CookieService} from 'angular2-cookie/core'; 

describe('Logged in guard should',() => { 
    let loggedInGuard: LoggedInGuard; 
    let storageService: StorageService; 
    let router = { 
     navigate: jasmine.createSpy('navigate') 
    }; 

    // async beforeEach 
    beforeEach(async(() => { 
     TestBed.configureTestingModule({ 
      imports: [FormsModule, CommonModule, HttpModule], 
      providers: [LoggedInGuard, StorageService, CookieService, 
       {provide: Router, useValue: router} 
      ] 
     }) 
      .compileComponents(); // compile template and css 
    })); 

    // synchronous beforeEach 
    beforeEach(() => { 
     loggedInGuard = TestBed.get(LoggedInGuard); 
     storageService = TestBed.get(StorageService); 
    }); 

    it('be able to hit route when user is logged in',() => { 
     storageService.isLoggedIn = true; 
     expect(loggedInGuard.canActivate()).toBe(true); 
    }); 

    it('not be able to hit route when user is not logged in',() => { 
     storageService.isLoggedIn = false; 
     expect(loggedInGuard.canActivate()).toBe(false); 
    }); 
}); 
+0

canActivate() требует аргументов. см. [этот вопрос] (https://stackoverflow.com/questions/40870670/how-do-i-mock-routerstatesnapshot-for-a-router-guard-jasmine-test) о том, как их обеспечить –

 Смежные вопросы

  • Нет связанных вопросов^_^