How to unit test this effect (with {dispatch: false})?
So it's as simple as this:
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);
});
});
});
The easiest (and officially suggested) way is to do it like this:
it('should navigate to the customers detail page', () => {
actions$ = of({ type: '[Customers Page] Customer Selected', name: 'Bob' });
// create a spy to verify the navigation will be called
spyOn(router, 'navigateByUrl');
// subscribe to execute the Effect
effects.selectCustomer$.subscribe();
// verify the navigation has been called
expect(router.navigateByUrl).toHaveBeenCalledWith('customers/bob');
});
Here is the source.