You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的计算结果不符合预期。

补充验证

修改后重新运行测试:

  1. fetchDataFx执行完成后,doneData事件会触发$storeB的更新
  2. $storeB的变化会触发$storeC的重新计算
  3. 此时scope.getState($storeC)会返回true,符合预期

内容的提问来源于stack exchange,提问作者Daniel Klimuntowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:12:10