6

我有一个快速演示,人们可以在这里下载:https ://stackblitz.com/edit/angular-vczzqp只需点击右上角的导出,在您最喜欢的终端中,install然后ng test使用您最喜欢的浏览器运行。

对我来说,基本上问题似乎是 Jasmine 的内部时间与对象不匹配。

下面是测试以及我得到的确切错误。有关完整的测试类,请参阅 app/Test 下的示例

it('should return a GET_GENERIC_FAILED when the services throws', () => {
    const action = new genericActions.GetAllGenericAction();

    genericsService.getAllGenerics.and.returnValue(Observable.throw({}));

    actions$.stream = hot('a', { a: action });
    const expected = cold('b', { b: new genericActions.GetGenericFailedAction() });

    expect(effects.getAllGenerics).toBeObservable(expected);
});

和错误

Expected
    [Object({
        frame: 0,
        notification: Notification({
            kind: 'N',
            value: GetGenericFailedAction({
                type: '[GENERIC] Get Generic Failed'
            }),
            error: undefined,
            hasValue: true
        })
    }), Object({
        frame: 0,
        notification: Notification({
            kind: 'C',
            value: undefined,
            error: undefined,
            hasValue: false
        })
    })]
    to equal
    [Object({
        frame: 0,
        notification: Notification({
            kind: 'N',
            value: GetGenericFailedAction({
                type: '[GENERIC] Get Generic Failed'
            }),
            error: undefined,
            hasValue: true
        })
    })].

任何指导将不胜感激。

4

1 回答 1

18

看起来这是一个关于如何引发错误的问题。

修复方法是添加|以将可观察对象标记为已完成,并将预期的可观察对象包装在其中()以将操作组合在一起。

actions$.stream = hot('a|', { a|: action });
const expected = cold('(b|)', { b: new genericActions.GetGenericFailedAction() });

有关语法的文档在这里,但是内部维护人员的文档似乎更容易消化。

于 2018-02-16T15:18:41.747 回答