大理石测试不使用过滤器运算符

时间:2019-06-06 15:55:35

标签: rxjs jestjs redux-observable ts-jest rxjs-marbles

编辑

我解决了这个问题。以下代码在测试中产生错误,但可以在浏览器中正常工作(请参见https://github.com/prumand/jest-marbles-merge-maphttps://github.com/ReactiveX/rxjs/issues/4837

  • 测试:返回WE_FINISH
  • 浏览器(预期):MY_NEW_ERROR
 // code
export default function basicMergeMapObs(
    action$: Observable<Action>
) : Observable<any> {
    return action$.pipe(
        filter((val: Action) => {
            throw new Error('We stop here')
        }),
        map((val: Action) => ({
            type: 'WE_FINISH',
        })),
        catchError(() => of({
            type: 'MY_NEW_ERROR',
        }))
    )
}

// test
it('should yield an MY_ERROR', () => {
    const source = of({
        type: 'TEST',
        status: 'NEW'
    })

    getScheduler().run(helpers => {
        const { expectObservable, cold } = helpers
        expectObservable(
            basicMergeMapObs(
                source
            )
        ).toBe(
            '(t|)',
            {
                t: { type: 'MY_NEW_ERROR' }
            }
        )
    })
})

function getScheduler() {
    return new TestScheduler((actual, expected) => {
        expect(actual).toMatchObject(expected);
    });
}

更新19.06.2019

我从给定的github问题中添加了Cartants示例,效果很好。仍然我的例子失败了。不知道为什么。 IMO应该总是抛出错误。

还有另一个更新,测试不会在linux上失败,而只会在我的Windows机器上失败

更新02.07.2019 :O似乎是我们使用的端点安全解决方案的问题...

0 个答案:

没有答案