调试时Jest测试没有按顺序执行
Jest test is not executed in order when debugging
我在 TypeScript
项目中使用 jest
和 PhpStorm
编写测试时遇到了一个非常奇怪的行为。
我做了一个简单的例子来说明这个问题:
解释发生了什么:
我运行测试了3次:
第一次使用所有行和调试器时,它 在第 14 行 上 失败 ,因为此时 mutated
仍应为 false
。
第二次用第15行注释掉和调试器。它在之前失败的地方取得成功。
除了没有调试器之外的所有行,它都成功了。
所以这里的重点不是讨论在 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
并且测试失败。
我不确定这是否可以视为错误或预期行为。我只能建议在处理像您这样的代码时禁用此选项
我在 TypeScript
项目中使用 jest
和 PhpStorm
编写测试时遇到了一个非常奇怪的行为。
我做了一个简单的例子来说明这个问题:
解释发生了什么:
我运行测试了3次:
第一次使用所有行和调试器时,它 在第 14 行 上 失败 ,因为此时
mutated
仍应为false
。第二次用第15行注释掉和调试器。它在之前失败的地方取得成功。
除了没有调试器之外的所有行,它都成功了。
所以这里的重点不是讨论在 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
并且测试失败。
我不确定这是否可以视为错误或预期行为。我只能建议在处理像您这样的代码时禁用此选项