我来自Java背景&努力使用RxJs TestScheduler。
以下是我要测试的示例代码:
export const getData = action$ => action$.ofType(ACTIONS.APP.DATA.REQUEST)
.mergeMap(() => restGet('<some-url>')
).<some-observable>
其中restGET
正在进行HTTP调用,我必须使用inject-loader
进行模拟,与retryWithDelay相同。
我试过以下:
const action$ = scheduler.createColdObservable(
next(0, {type: ACTIONS.APP.DATA.REQUEST})
);
const data$ = app.getValue(ActionsObservable.of(action$));
let actual = startScheduler(data$);
const expected = [
next(200, <someAction>),
complete(200)
];
expect(actual.messages).to.deep.equal(expected); // true
expect(restGetSpy.calledOnce).to.be.true; // false
我能够使用inject-loader
在代码中注入依赖项,并使用testScheduler
运行测试但是我的模拟restGetSpy没有被调用似乎流不在里面mergeMap()但它调用了end observable,它引发了成功动作,因为这在我的第一个断言中变得正确。
我无法理解为什么会这样?
欢迎所有建议。