运行 所有测试的框架与 运行 只有一项测试的框架不同,为什么?

Frame differs in running all test from running only one test, why?

如果我运行一次对一个史诗进行所有测试,只有第一个测试通过。其他测试失败是因为框架不同。但是每个测试都单独 运行 通过。

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

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

test('should fail if e-mail is missing', () => {
    testScheduler.run(({ hot, expectObservable }) => {
        const action$ = new ActionsObservable(
            hot('-a', {
                a: login('', 'secret')
            })
        );

        const output$ = epic(action$, null, null);

        expectObservable(output$).toBe('-a', {
            a: failure(
                formErrors.credentialsEmpty(['email', 'password'])
            )
        });
    });
});

我希望输出弹珠的帧数为 1,但实际为 2。 失败测试的输出:

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

编辑

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

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

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