编辑
我把问题归结了。以下代码在测试中产生错误,但在浏览器中按预期工作(请参阅https://github.com/prumand/jest-marbles-merge-map和https://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 问题中添加了 carants 示例,效果很好。我的例子仍然失败。不知道为什么。IMO 它应该总是抛出一个错误。
还有另一个更新,测试不会在 linux 上失败,但只能在我的 windows 机器上
更新 02.07.2019 :O 似乎是我们使用的端点安全解决方案的问题......