Effector应用测试问题:fetchDataFx.doneData未触发更新
解决Effector测试中$storeB未响应fetchDataFx.doneData的问题
核心问题
你的测试代码未导入module2.js,而$storeB.on(fetchDataFx.doneData, ...)这一事件绑定逻辑是在module2.js加载时执行的。如果该模块未被导入,这段绑定代码根本不会运行,导致fetchDataFx.doneData触发时,$storeB不会收到更新通知。
解决方案
在测试文件中显式导入module2.js,无需使用它的导出,仅需确保模块代码被执行:
// module3.test.js import {fetchDataFx, $storeA} from 'module1'; import {$storeC} from 'module3'; import './module2'; // 关键:导入module2以初始化事件绑定
原理说明
Effector的事件绑定、sample、forward等逻辑都是模块级别的初始化代码,只有当模块被导入时,这些逻辑才会被注册到Effector的内部机制中。你的测试中因为缺少module2的导入,$storeB从未监听fetchDataFx.doneData事件,所以即使fetchDataFx执行成功,$storeB也不会更新,最终导致$storeC的计算结果不符合预期。
补充验证
修改后重新运行测试:
fetchDataFx执行完成后,doneData事件会触发$storeB的更新- $storeB的变化会触发$storeC的重新计算
- 此时
scope.getState($storeC)会返回true,符合预期
内容的提问来源于stack exchange,提问作者Daniel Klimuntowski
相关产品推荐
相关产品推荐

