You need to enable JavaScript to run this app. JavaScript类实例化失败:单元测试未通过,配置未应用defaultConfig默认值
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript类实例化失败:单元测试未通过,配置未应用defaultConfig默认值

类实例化默认配置重置异常问题排查

根因定位

你贴出的类实现逻辑本身符合预期,若第三个测试用例失败,核心原因大概率是实际运行的类代码中,Object.assign 未传入空对象作为合并目标,即错误写法为 Object.assign(defaultConfig, config),而非你展示的 Object.assign({}, defaultConfig, config)。

Object.assign(target, ...sources) 会直接修改第一个参数 target 的属性,修改完成后返回该目标对象。
如果直接把模块顶层的 defaultConfig 作为合并目标,每次实例化都会直接篡改原始默认配置:

  • 第一次实例化传空对象,defaultConfig 无修改,测试通过
  • 第二次实例化传 {texture: 'smooth'},直接将 defaultConfig.texture 改为 'smooth',当前实例属性符合断言,测试通过
  • 第三次实例化传 {color: 'green'},此时已被污染的 defaultConfig 已经是 {color: 'blue', texture: 'smooth'},合并后得到的texture为'smooth',与断言期望的'rough'不符,测试失败。

正确实现验证

你贴出的带空对象的写法是合规的:

this.config = Object.assign({}, defaultConfig, config);
  • 第一个参数传入空对象 {},每次合并都会生成全新的配置对象
  • 不会篡改原始的 defaultConfig 常量,也不会被其他实例的配置污染
  • 每个实例的config都是基于未被修改的默认值,结合传入参数合并得到,无残留属性

确认代码无误后的排查方向

  • 检查是否有其他代码直接修改了模块内的 defaultConfig(比如误将 defaultConfig 导出后被外部篡改)
  • 排查是否使用了类字段提前赋值的写法:类字段初始化执行时机早于constructor,此时 this.config 还未完成合并,会导致属性取值异常
  • 检查测试用例之间是否存在共享状态污染,比如全局挂载的实例未被清理,被后续测试修改了属性

内容的提问来源于stack exchange,提问作者Kevin Danikowski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 21:24:04