测试RxJS:Frame在运行所有测试和只运行一个测试方面有所不同

测试RxJS:Frame在运行所有测试和只运行一个测试方面有所不同,rxjs,redux-observable,Rxjs,Redux Observable,如果我一次运行一个epic的所有测试,只有第一个测试通过。由于框架不同,其他测试失败。但每次单独运行的测试都会通过 我找不到与此相关的任何问题。我在RxJS中找到了一些东西,而不是redux可观察文档。 我原以为TestScheduler上可能有某种重置功能,但实际上没有 我的一个测试(它们看起来都很相似): test('如果电子邮件丢失,则应失败',()=>{ testScheduler.run({hot,expectObservable})=>{ const action$=新操作可维护(

如果我一次运行一个epic的所有测试,只有第一个测试通过。由于框架不同,其他测试失败。但每次单独运行的测试都会通过

我找不到与此相关的任何问题。我在RxJS中找到了一些东西,而不是redux可观察文档。 我原以为
TestScheduler
上可能有某种重置功能,但实际上没有

我的一个测试(它们看起来都很相似):

test('如果电子邮件丢失,则应失败',()=>{
testScheduler.run({hot,expectObservable})=>{
const action$=新操作可维护(
热('-a'{
a:登录(“”,'secret')
})
);
const output$=epic(action$,null,null);
预期可观测(输出$).toBe('-a'{
a:失败(
formErrors.credentialsEmpty(['email','password'])
)
});
});
});
我希望输出大理石的框架是1,但它是2。 失败测试的输出:

Array [
        Object {
    -     "frame": 1,
    +     "frame": 2,
          "notification": Notification {
            "error": undefined,
            "hasValue": true,
            "kind": "N",
            "value": Object {

编辑


我可以通过为每个测试创建一个
TestScheduler
实例来避免这种行为,但我不确定是否应该这样做。

今天偶然发现了这一点。我认为为每个测试创建一个新的TestScheduler可能是一个好主意。在测试之间,它似乎没有明显的影响——这样,您就可以确保在测试之间重置状态


另一个解决方法是在beforeach中执行
testScheduler.frame=0
,但每次我都选择从头开始创建它。

今天偶然发现了这一点。我认为为每个测试创建一个新的TestScheduler可能是一个好主意。在测试之间,它似乎没有明显的影响——这样,您就可以确保在测试之间重置状态


另一个解决方法是在beforeach中执行
testScheduler.frame=0
,但每次我都选择从头开始创建它。

Aha!我没有想过帧不是相对的。我同意你的意见。非常感谢。是的,我只是在挠头好几分钟后才注意到我的第一次测试可以正常进行,第二次测试的帧数将是原来的两倍……还不清楚!啊哈!我没有想过帧不是相对的。我同意你的意见。非常感谢。是的,我只是在挠头好几分钟后才注意到我的第一次测试可以正常进行,第二次测试的帧数将是原来的两倍……还不清楚!