我有一个使用它的构造函数:
constructor(
public core: CoreComponent,
) {
//
}
但是当我尝试用这样的测试用例测试这些组件时:
describe('CoreSubMenuComponent', () => {
let component: CoreSubMenuComponent;
let fixture: ComponentFixture<CoreSubMenuComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
TestingModule.forRoot(),
]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(CoreSubMenuComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
我得到一个空注射器错误:
Error: StaticInjectorError(DynamicTestModule)[CoreSubMenuComponent -> CoreComponent]:
StaticInjectorError(Platform: core)[CoreSubMenuComponent -> CoreComponent]:
NullInjectorError: No provider for CoreComponent!
它被导入到testingModule中,因此不是问题。我也尝试将它添加到providers数组中。但这只是将它移动到角度渲染器,该渲染器无法添加到providers数组中。我还在@injectable()
的@component
标签之前添加了一个CoreComponent
标签,但它没有改变我的测试失败。
我尝试用@host()
获取它,但它抛出一个错误。我也试图用Injector
得到它,但这也引发了一个错误。这些是使用CoreComponent
作为var的4个组件从它们获取一些信息,但它们使测试失败。我所有的其他测试都通过了超过80次测试。只是这4个不起作用,因为他们试图获得在CoreComponent
中定义的属性。
有人知道我如何用一个实例引用这个组件,以便我的测试通过吗?
要修复此错误,请使用@host en @optional装饰器。这告诉编译器要查找它,但如果没有提供则不需要:
constructor(
@Host() @Optional() public core: CoreComponent,
) {
//
}