调试时Jest测试没有按顺序执行

Jest test is not executed in order when debugging

我在 TypeScript 项目中使用 jestPhpStorm 编写测试时遇到了一个非常奇怪的行为。

我做了一个简单的例子来说明这个问题:

解释发生了什么:

我运行测试了3次:

  1. 第一次使用所有行和调试器时,它 在第 14 行 失败 ,因为此时 mutated 仍应为 false

  2. 第二次用第15行注释掉和调试器。它在之前失败的地方取得成功。

  3. 除了没有调试器之外的所有行,它都成功了。

所以这里的重点不是讨论在 getter 中进行突变是好是坏。

重点是理解为什么第15行第14行之前执行调试器何时激活?

我把代码放在下面,这样你可以更容易地阅读它:

class Foo {
    public mutated: boolean = false;

    public get getMe(): string {
        this.mutated = true;
        return 'me';
    }
}

test('state of mutated', () => {
    const foo = new Foo();
    expect(foo.mutated).toEqual(false);
    expect(foo.getMe).toEqual('me');
    expect(foo.mutated).toEqual(true);
});

感谢您的帮助。

这不是执行顺序的问题 - 调用以正确的顺序执行。这是一个不同的问题:在 设置中启用 在变量视图中启用自动表达式 |构建、执行、部署 |调试器 |数据视图 ,一旦遇到断点,调试器就会尝试计算表达式以计算变量值。所以它评估 foo.getMe - 结果,foo.mutated 变成 true 并且测试失败。

我不确定这是否可以视为错误或预期行为。我只能建议在处理像您这样的代码时禁用此选项