NgRx effect单元测试Jasmine spy调用计数混淆问题排查
NgRx Effect单元测试spy调用计数累加问题排查点
- Effect实例未在每个测试用例前重新初始化
若Effect实例创建放在
beforeAll中或全局仅初始化一次,会导致多个测试用例共用同一个Effect流实例,前一个用例触发的action、流订阅未完全销毁,会直接影响后一个用例的执行。需将Effect的实例创建逻辑移到beforeEach钩子中,保证每个测试用例都拿到全新的Effect实例。 - Actions流未重置
若
provideMockActions为全局初始化,或Actions observable没有在每个用例前清空积压事件,会出现前一个用例的action流入后一个用例的Effect逻辑中。需在beforeEach中重新提供Actions实例,或每次测试用hot/coldobservable重新生成输入流。 - Spy重置时机不正确
若
addEditedDataSpy.calls.reset()的调用时机在beforeEach的订阅取消逻辑之后,或在测试用例执行完成后才调用,会出现前一个用例的调用计数被统计到后一个用例中。需将spy的重置逻辑放在beforeEach的最开头,保证每个测试用例执行前spy计数已清空。 - 异步测试用例未正确等待流执行完成
若测试用例没有用
fakeAsync+tick、waitForAsync包裹,或没有返回observable让Jasmine等待异步逻辑执行完成,会出现前一个用例的异步逻辑在后续用例运行时才执行,最终导致计数累加。所有涉及Effect的测试用例都要正确包裹异步处理逻辑,保证当前用例的所有异步操作执行完成后再进入下一个用例。
内容的提问来源于stack exchange,提问作者peterc
相关产品推荐
相关产品推荐

