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

Jasmine单元测试中FormBuilder#group废弃告警如何解决?

解决方案

deprecation group is deprecated: This API is not typesafe and can result in issues with Closure Compiler renaming. Use the FormBuilder#group overload with AbstractControlOptions instead.

这个告警的触发原因是你调用了FormBuilder中已被标记为弃用的group方法重载:旧版本允许第二个参数直接传入校验函数/校验函数数组,新版本要求第二个参数必须是符合AbstractControlOptions类型的对象(包含validators、asyncValidators、updateOn等可选属性)。

你的测试代码中虽然是用Jasmine Spy模拟的FormBuilder实例,但只要调用group方法的签名匹配了已弃用的旧重载,lint就会触发告警,和生产代码的触发逻辑一致。

可行处理方案

  • 方案1:调整所有测试中formBuilder.group的调用参数,匹配新重载
    如果你调用group时不需要额外配置,只需在第二个参数位置显式传入空对象即可,示例:

    // 旧写法,触发告警
    formBuilder.group({
      username: [''],
      password: ['']
    })
    
    // 新写法,消除告警
    formBuilder.group({
      username: [''],
      password: ['']
    }, {}) // 第二个参数为符合AbstractControlOptions类型的空对象
    

    如果需要传入校验规则,改为包裹在对象内的写法:

    // 旧写法
    formBuilder.group({ name: [''] }, Validators.required)
    // 新写法
    formBuilder.group({ name: [''] }, { validators: Validators.required })
    
  • 方案2:显式声明Spy的group方法匹配新重载签名
    定义Spy时明确标注group方法的入参类型,让lint识别到你使用的是未弃用的重载,示例:

    import { AbstractControlOptions, FormBuilder } from '@angular/forms';
    import { EMPTY } from 'rxjs';
    
    // 定义Spy时明确group方法的参数匹配新重载
    formBuilder = jasmine.createSpyObj<FormBuilder>('formBuilder', {
      group: (controls: Record<string, any>, options?: AbstractControlOptions) => ({ 
        valueChanges: EMPTY, 
        value: {} 
      } as any)
    });
    
  • 方案3:临时禁用测试文件的对应lint规则(不推荐)
    如果修改所有调用成本过高,可在测试文件顶部加注释忽略该规则,ESLint规则示例:

    /* eslint-disable @angular-eslint/no-deprecated-form-group */
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:27:03