이런 질문을해서 죄송합니다. 하지만 canActivate 가드 파일 테스트를 작성하는 데 블로그 나 YouTube 자습서를 찾을 수 없습니다. 공식 문서에는 언급 된 것이 없습니다.단위 테스트하는 방법 can2ctasate 보호 방법을 사용하여 각도 2 재스민?
도움이 될 것입니다.
이런 질문을해서 죄송합니다. 하지만 canActivate 가드 파일 테스트를 작성하는 데 블로그 나 YouTube 자습서를 찾을 수 없습니다. 공식 문서에는 언급 된 것이 없습니다.단위 테스트하는 방법 can2ctasate 보호 방법을 사용하여 각도 2 재스민?
도움이 될 것입니다.
아무도 내 질문에 답변하지 않았으므로이 상황을 경험할 수있는 사람들을 돕기 위해 내 코드 스 니펫을 붙여 넣습니다.
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);
});
});
canActivate()에는 인수가 필요합니다. 방법을 알려면 [이 질문] (https://stackoverflow.com/questions/40870670/how-do-i-mock-routerstatesnapshot-for-a-router-guard-jasmine-test)을 참조하십시오. –
정확히 무엇을 테스트 할 것인가? 당신의 가드에서'canActivate()'메소드가 실제로 호출되었거나'canActivate()'메소드 안에있는 코드는 무엇입니까? – AngularChef