아래에 ngrx/effects 클래스가 있습니다. 테스트 해보고 싶지만 테스트를 실행할 때 아무 것도 인쇄하지 않고 통과합니다. 나는 액션 TRIGGER_LOAD_NAVIGATION_ITEMS를 실행할 때 LOAD_NAVIGATIONS_LINKSangular2에서 ngrx/effects 클래스를 테스트하는 방법은 무엇입니까?
효과가
import { Injectable } from '@angular/core';
import { Effect, Actions } from '@ngrx/effects';
import { NavigationActionType } from 'app/core/store/actions/navigation/navigation.action';
import { NavigationService } from 'app/core/services/navigation.service';
import 'rxjs/add/operator/switchMap';
@Injectable()
export class NavigationServiceEffect {
@Effect()
navigations$ = this.actions$
.ofType(NavigationActionType.TRIGGER_LOAD_NAVIGATION_ITEMS)
.switchMap(() => this.navigationService.load())
.map(data => ({ type: NavigationActionType.LOAD_NAVIGATIONS_LINKS, payload: data}));
constructor(private actions$: Actions, private navigationService: NavigationService) {}
}
테스트 파일
import { Http, Request, RequestOptionsArgs } from "@angular/http";
import { RouterModule, Router } from "@angular/router";
class HttpMock extends Http {
get(url: string, options?: RequestOptionsArgs): any {
}
request(url: string | Request, options?: RequestOptionsArgs): any {
}
}
fdescribe('Tag Effect',() => {
let runner: EffectsRunner;
let navEffects: NavigationServiceEffect;
let navService: NavigationService;
let actions: Actions;
beforeEach(() => TestBed.configureTestingModule({
imports: [
EffectsTestingModule,
RouterModule,
StoreModule.provideStore(reducers())
],
providers: [
Actions,
NavigationService,
HttpService,
{ provide: Http, useClass: HttpMock },
{ provide: Router, useClass: class { navigate = jasmine.createSpy("navigate"); } }
]
}));
it('Call Load Navigation items action after Trigger Load aciton',
inject([
Actions, NavigationService
],
(_actions, _navService) => {
actions = _actions;
navService = _navService;
spyOn(navService, 'load')
.and.returnValue(Observable.of([
{ "name": "Help", "hasChild": false, "roles": [101, 151, 201, 301, 401], "url": "help" }
]));
navEffects = new NavigationServiceEffect(actions, navService);
navEffects.navigations$.subscribe(r => console.log(r));
navEffects.navigations$.subscribe(result => {
console.log(result);
expect(result.type).toEqual(NavigationActionType.LOAD_NAVIGATIONS_LINKS);
expect(result.payload.length).toEqual(3); // This should fail
});
}));
});
테스트 파일로 테스트가 나는 결과 집합을 조롱하고 작업 유형을 반환받을해야해야 위의 문장에서 예상되는 페이로드의 길이가 1이고 3과 같으면 실패해야하므로 실패해야합니다. 그러나 테스트는 통과하지만 콘솔 출력은 기록되지 않습니다. 위 파일을 어떻게 테스트 할 수 있습니까?