时间/框架问题与茉莉花大理石使用冷热

时间:2018-02-15 20:11:51

标签: angular jasmine jasmine-marbles

我有一个人们可以在这里下载的快速演示:https://stackblitz.com/edit/angular-vczzqp只需点击右上角的导出,在您喜欢的终端中,然后使用您喜欢的浏览器运行installng 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
        })
    })].

任何指导都将不胜感激。

1 个答案:

答案 0 :(得分:7)

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

修复是添加|以将observable标记为已完成,并将()中的预期observable包装在一起以对操作进行分组。

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

语法文档为here