编辑
我解决了这个问题。以下代码在测试中产生错误,但可以在浏览器中正常工作(请参见https://github.com/prumand/jest-marbles-merge-map和https://github.com/ReactiveX/rxjs/issues/4837)
// 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似乎是我们使用的端点安全解决方案的问题...