【发布时间】:2019-07-05 10:00:24
【问题描述】:
这是组件构造函数:
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 弹出这个(所以我猜它是一个动态创建的) - 有什么帮助吗?
错误地将其作为一个骗子关闭,我的是关于单元测试的,所以答案有点微妙。
【问题讨论】:
-
只使用构造函数创建一个
Stub类,并在您的 providers 数组中用useValue替换useClass: Stub -
@MikeTung - 谢谢,但没有骰子,看我编辑。
-
你试过this answer吗?我们在您的问题中没有看到文件
imports。 -
@ConnorsFan - 是的,我都试过了。我觉得我看到的错误实际上并不是问题所在。就好像我的提供者根本没有被接......
-
@ConnorsFan - 你明白了,我要对那个发表评论并关闭这个作为欺骗它。它有点细微差别 - 在我的测试中,我是从 @angular/material/dialog 导入的,但在我的组件中,我是从 @angular/material 导入的......为此损失了大约 5 个小时和很多神经。
标签: angular angular-material angular-test