代码之家  ›  专栏  ›  技术社区  ›  user2024080

在使用角度传感器进行测试时,如何触发“ngrx效应”错误

  •  0
  • user2024080  · 技术社区  · 6 年前

    以下是我的效果:

     getAssessmentPeriods$: Observable<Action> = createEffect(() =>
            this.actions$.pipe(
                ofType(courseAttributeActions.getAssessmentPeriod_CR),
                switchMap(() => this.courseAttributeService.getAssessmentPeriods()
                    .pipe(
                        map((value: any) => {
                            return courseAttributeActions.getAssessmentPeriodSuccess_CR({ payload: value });
                        }),
                        catchError(error => of(courseAttributeActions.LoadFailure_CR(error)))
                    ))
            ));
    

    规范文件:快乐场景运行良好:

    it('should return a cold observable of getAssessmentPeriodSuccess_CR', () => {
    
            const fakeData: any = [];
    
            const start = courseAttributeActions.getAssessmentPeriod_CR();
            const completion = courseAttributeActions.getAssessmentPeriodSuccess_CR({ payload: fakeData });
    
            jest.spyOn(service, 'getAssessmentPeriods').mockImplementation(() => of(fakeData));
    
            actions = hot('--a-', { a: start });
            const expected = cold('--(b)', { b: completion });
    
            expect(effects.getAssessmentPeriods$).toBeObservable(expected);
    
        });
    

    规范文件:错误情况不起作用:

     it('should return a cold observable of LoadFailure_CR error ', () => {
    
            const errors: any = throwError((new Error('Network error')));
    
            const start = courseAttributeActions.getAssessmentPeriod_CR();
            const completionError = courseAttributeActions.LoadFailure_CR({error:errors});
    
            jest.spyOn(service, 'getAssessmentPeriods').mockImplementation(() => of(errors));
    
            actions = hot('--a-', { a: start });
            const expected = cold('--(b)', { b: completionError });
    
            expect(effects.getAssessmentPeriods$).toBeObservable(expected);
    
        });
    

    在错误场景中如何触发 error 在服务?事实上,我是从间谍那里发来的。但我仍然收到了成功的信息。

    控制台中出现错误,例如:

    - Expected
        + Received
    
        @@ -4,14 +4,14 @@
              "notification": Notification {
                "error": undefined,
                "hasValue": true,
                "kind": "N",
                "value": Object {
        -         "error": Observable {
        +         "payload": Observable {
                    "_isScalar": false,
                    "_subscribe": [Function anonymous],
                  },
        -         "type": "[candidate-registration-management] LoadFailure_CR",
        +         "type": "[candidate-registration-management_CR] getAssessmentPeriodSuccess",
                },
              },
            },
          ]
    
          69 |         const expected = cold('--(b)', { b: completionError });
          70 |
        > 71 |         expect(effects.getAssessmentPeriods$).toBeObservable(expected);
    

    如何修复错误?真的需要为1个效果编写2个单独的“it”函数吗? 寻求帮助。提前感谢。

    0 回复  |  直到 6 年前
        1
  •  1
  •   Andrei Gătej    6 年前

    throwError

    return new Observable(subscriber => subscriber.error(error));
    

    所以,通过做 mockImplementation(() => of(errors)); 你会有一个可观察到的(例如 of )其发射另一个可观察到的(a next 通知)。

    为了发生错误 getAssessmentPeriods observable必须发出 error 通知,所以我认为你可以通过以下方式解决:

    .mockImplementation(() => errors)