如何解决角度测试-无法解析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 举报,一经查实,本站将立刻删除。