微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

角度测试-无法解析MyOverlayRef的所有参数:?,?,?

如何解决角度测试-无法解析MyOverlayRef的所有参数:?,?,?

我基于this blogs code创建了一个可重复使用的角度叠加模式。我有一个名为overlay-ref.ts文件代码

export class MyOverlayRef<R = any,T = any> {
  constructor(
    public overlay: OverlayRef,public content: string | TemplateRef<any> | Type<any>,public data: T // pass data to modal i.e. FormData
  ) {}
}

如您所见,它没有用@Injectable装饰,所以当我在组件中使用此文件时,我会像这样使用它

export class CompanyContactOverlayComponent implements OnInit {
 
  constructor(public ref: MyOverlayRef){} 
 }

在我的组件中它可以工作,但是当我测试该组件时,我像这样使用它

beforeEach(async () => {
    await Testbed.configureTestingModule({
      declarations: [CompanyContactOverlayComponent],providers: [MyOverlayRef]
    })
    .compileComponents();
  });

它抛出一个错误Can't resolve all parameters for MyOverlayRef: (?,?,?)。看到了许多这样的问题,但找不到任何答案。

我的直觉是,由于它不是@injectable,所以我不能在provider[]中使用它。

我可以通过任何方式自动创建它的实例并解决此问题。

修改 在服务类中,我正在创建要注入到ref-class

自定义注入器
open<R = any,T = any>(
    content: string | TemplateRef<any> | Type<any>,data: T
  ): MyOverlayRef<R> {
    const configs = new OverlayConfig({
      hasBackdrop: true,scrollStrategy: this.overlay.scrollStrategies.block(),});

    const overlayRef = this.overlay.create(configs);

    const myOverlayRef = new MyOverlayRef<R,T>(overlayRef,content,data);

    const injector = this.createInjector(myOverlayRef,this.injector);

    overlayRef.attach(new ComponentPortal(OverlayModalComponent,null,injector));

    return myOverlayRef;
  }

  createInjector(ref: MyOverlayRef,inj: Injector) {
    const injectorTokens = new WeakMap([[MyOverlayRef,ref]]);
    return new PortalInjector(inj,injectorTokens);
  }

解决方法

尝试为其提供模拟值。

const mockOverlayRef = {}; // add the properties that are required,here it is an empty object

beforeEach(async () => {
    await TestBed.configureTestingModule({
      declarations: [CompanyContactOverlayComponent],providers: [{ provide: MyOverlayref,useValue: mockOverlayRef }] // mock it like so.
    })
    .compileComponents();
  });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。