DEBUG.WIKI
阿里云;从建站到云上业务;云服务器 · 数据库 · 对象存储;查看产品 →
搬瓦工;先看线路,再选 VPS;CN2 GIA · 对应线路套餐;查看线路 →
野草云;香港 200Mbps 峰值;不限月流量 · BGP VPS;查看套餐 →

jasmine-core reset 报 currentEnv_ 无法赋值

jasmine-core 7.0.1 的 Node reset 引用了内部未导出的 private$,调用即报 currentEnv_ 无法赋值。正式 7.0.2 调整导出接线,更新后仍需检查两轮测试的状态与接口。

调用 jasmineCore.reset(),还没清除任何测试状态,就报 Cannot set properties of undefined (setting 'currentEnv_')。如果使用 jasmine-core 7.0.1 的 Node 入口,应先检查该版 reset 的导出接线。

7.0.1 的 Node 包装层从内部 jasmine.js 解构 private$,然后向它的 currentEnv_ 赋值;内部模块实际没有导出 private$。这个值因此是 undefined。包装函数后面还引用了没有在该文件绑定的 jasmine 与 rebindInterface,只补一个导出也不构成完整修复。

更新到正式修正的入口

jasmine-core 7.0.2 已让 Node 包装层直接导入内部模块提供的 reset,不再在包装文件里拼接那段无效逻辑。可沿工具链兼容范围更新实际使用的 jasmine-core,并保留原来的 runner 配置。

例如,需要在拥有状态管理权的 Node 测试工具中检查导出时,可以使用:

const jasmineCore = require('jasmine-core');

console.log(jasmineCore.version());
jasmineCore.reset();

reset 会移除 specs、suites、reporters,并重置配置。它不是一条无影响的健康检查,不能在套件运行中或共享 runner 的任意业务位置调用。示例仅用于应用自己管理的测试环境;先完成当前运行,再按照工具原有流程重建下一轮需要的配置与用例。

重置状态与替换导入引用不同

长期进程可能缓存已经导入的 describe、it 等函数,或把它们复制到全局。修复 reset 抛错后,还要检查测试工具如何在重置后继续取得和安装接口,不要假定删除一个 require.cache 条目就清掉所有旧引用与全局状态。

也不要直接给 private$.currentEnv_ 填值,或手工复制新版本的一小段内部代码到 node_modules。内部对象不是应用应依赖的稳定重置 API,局部补丁还可能遗漏 reporter、配置或接口绑定。

验收应在工具原来的生命周期里进行两轮独立运行:确认 reset 本身不再抛错,第一轮登记的用例、reporter 和配置没有意外进入第二轮,同时第二轮的接口仍然可用。只看进程中打印了新的 Env,不能证明全部测试状态已经按预期重建。