ngrxとユニットテストの初心者はこちら。私は次の効果があります:
@Injectable()
export class NotificationEffects {
@Effect({dispatch: false})
notificationShow$ = this.actions$
.ofType(notificationAction.NOTIFICATION_SHOW)
.do((action: notificationAction.NotificationShowAction) => {
this.notificationService.info(action.payload.config);
});
constructor(private actions$: Actions, private notificationService: NotificationService) {}
}
具体的には、notificationServiceメソッド情報が呼び出されたことをテストしたいと思います。どうすればいいですか?
私はこれらの例に従いましたが、解決策が見つかりませんでした:
https://netbasal.com/unit-test-your-ngrx-effects-in-angular-1bf2142dd459https://medium.com/@adrianfaciu/testing-ngrx-effects -3682cb5d760ehttps://github.com/ngrx/effects/blob/master/docs/testing.md
だからそれはこれと同じくらい簡単です:
describe('notificationShow$', () => {
let effects: NotificationEffects;
let service: any;
let actions$: Observable<Action>;
const payload = {test: 123};
beforeEach( () => {
TestBed.configureTestingModule( {
providers: [
NotificationEffects,
provideMockActions( () => actions$ ),
{
provide: NotificationService,
useValue: jasmine.createSpyObj('NotificationService', ['info'])
}
]
} );
effects = TestBed.get(NotificationEffects);
service = TestBed.get(NotificationService);
});
it('should call a notification service method info with a payload', () => {
actions$ = cold('a', { a: new notificationAction.NotificationShowAction(payload) });
effects.notificationShow$.subscribe(() => {
expect(service.info).toHaveBeenCalledWith(payload);
});
});
});
it('should call a notification service method info with a payload', () => {
actions$ = cold('a', { a: new notificationAction.NotificationShowAction(payload) });
effects.notificationShow$.subscribe(() => {
expect(service.info).toHaveBeenCalledWith(payload);
});
});
それはうまく機能しますが、問題はエラーが発生したときです。この場合、エラーはテストランナーに報告されません(私の場合は冗談です)。エラーを取得するには、trycatchブロックを追加する必要があります。
it('should call a notification service method info with a payload', () => {
actions$ = cold('a', { a: new notificationAction.NotificationShowAction(payload) });
effects.notificationShow$.subscribe(() => {
try {
expect(service.info).toHaveBeenCalledWith(payload);
} catch (error) {
fail('notificationShow$: ' + error);
}
});
});