Angular @NgRx/茉莉花大理石测试效果

Angular @NgRx/茉莉花大理石测试效果,angular,unit-testing,rxjs,ngrx,Angular,Unit Testing,Rxjs,Ngrx,我正在使用Angular 4和NgRx 4创建一个web应用程序,我在单元测试方面遇到了一些问题 我创建了下面的测试,以查看是否可以获得效果的返回值: it('should load orders and call load orders complete action', fakeAsync(() => { let responsePayload; const mockData = [{ id: 1 }, { id: 2 }, { id: 3 }]; cons

我正在使用Angular 4和NgRx 4创建一个web应用程序,我在单元测试方面遇到了一些问题

我创建了下面的测试,以查看是否可以获得效果的返回值:

it('should load orders and call load orders complete action', fakeAsync(() => {

    let responsePayload;
    const mockData = [{ id: 1 }, { id: 2 }, { id: 3 }];

    const orderService = TestBed.get(OrderService);
    const testScheduler = new TestScheduler(null);
    orderService.getAllOrders.and.returnValue(hot('a|', { a: mockData }));

    actions = Observable.of(new orderActions.LoadAllOrdersAction(new Date()));

    const subscription = effects.loadAllOrders$.subscribe((result: orderActions.LoadAllOrdersCompleteAction) => {
      responsePayload = result.payload;
    });


    getTestScheduler().flush();
    tick();
    expect(responsePayload).toEqual(mockData);

    subscription.unsubscribe();

  }));
这就是我正在测试的效果:

@Injectable()
export class OrderEffect {

  @Effect()
  loadAllOrders$: Observable<Action> = this.actions.ofType(orderActions.LOAD_ALL_ORDERS)
    .withLatestFrom(this.store$) // Get the latest state from the store and add as the second value of the array below
    .switchMap((input: any[]) => {
      const action: orderActions.LoadAllOrdersAction = input[0];
      const store: AppState = input[1];

      return Observable.timer(0, store.orders.pollingInterval) // Timer to create the polling effect.
        .switchMap(() => this.orderService.getAllOrders(action.payload)
          .map((orders: Array<any>) => new orderActions.LoadAllOrdersCompleteAction(orders))
          .catch(error => Observable.throw(new orderActions.LoadAllOrdersFailAction(error)))
        );
    });

  constructor(private actions: Actions, private orderService: OrderService, private store$: Store<AppState>) { }
}
  it('should load orders and call load orders complete action', fakeAsync(() => {

    let responsePayload;
    const mockData = [{ id: 1 }, { id: 2 }, { id: 3 }];

    const orderService = TestBed.get(OrderService);
    const testScheduler = new TestScheduler(null);
    orderService.getAllOrders.and.returnValue(Observable.of(mockData));

    actions = Observable.of(new orderActions.LoadAllOrdersAction(new Date()));

    const subscription = effects.loadAllOrders$.subscribe((result: orderActions.LoadAllOrdersCompleteAction) => {
      responsePayload = result.payload;
    });

    tick();
    expect(responsePayload).toEqual(mockData);

    subscription.unsubscribe();

  }));