How to unit test this effect (with {dispatch: false})?

后端 未结 2 1446
北海茫月
北海茫月 2021-02-13 00:37

ngrx and unit testing beginner here. I have the following effect:

@Injectable()
export class NotificationEffects {
  @Effe         


        
相关标签:
2条回答
  • 2021-02-13 01:31

    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.

    0 讨论(0)
  • 2021-02-13 01:38

    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);
        });
      });
    });
    
    0 讨论(0)
提交回复
热议问题