这是组件构造函数:
constructor(
public dialogRef: MatDialogRef<TaskActionModalContainer>,
@Inject(MAT_DIALOG_DATA) data
) {}
这是测试台:
TestBed.configureTestingModule({
imports: [ MatDialogModule ],
declarations: [ TaskActionModalContainer ],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
providers: [
{
provide: MatDialogRef,
useValue: {},
},
{
provide: MAT_DIALOG_DATA,
useValue: {}
}
]
})
.compileComponents();
这是错误:
StaticInjectorError(DynamicTestModule)[TaskActionModalContainer -> MatDialogRef]:
StaticInjectorError(Platform: core)[TaskActionModalContainer -> MatDialogRef]:
NullInjectorError: No provider for MatDialogRef!
我进行了上下搜索,到处都可以看到此NullInjector错误,但我仍在继续获取它。我以为有角的大师可以很快解决这个问题。
帮助!
编辑:
我也使用useClass
失败了。
有趣的是,我也有这个:
beforeEach(inject(
[
MatDialogRef,
MAT_DIALOG_DATA
],
(
dialogRef,
dialogData
) => {
console.log(dialogRef);
console.log(dialogData);
}));
运行测试时,我看到了那些console.log。...恰好在向我显示TestBed.createComponent
处的错误
编辑#2-我觉得这是因为这是一个entryComponent,我不知道这是什么意思,但这是一个。我有一个ModalContainer可以弹出此窗口(所以我想它是动态创建的)-有帮助吗?
我误以为是骗人的,我把这与单元测试有关,所以答案有些微妙。
答案 0 :(得分:0)
对于在单元测试中遇到此问题的其他人,评论中的答案非常接近回答我的问题,但真正的问题是,规范文件和组件文件都必须从同一位置导入MatDialogRef和MAT_DIALOG_DATA- @angular/material/dialog
我的组件看起来像这样:
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
我的测试如下:
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
更改我的组件导入以匹配我的测试就可以解决它!