我有一个指令,其中我通过inject关键字获取组件实例,如下所示:
export class MyDirective implements AfterViewInit {
private component: MyBaseComponent = inject(MyBaseComponent);
...
}
MyBaseComponent是一个抽象组件,从中派生出多个其他控件(例如MyTextComponent).
MyDirective在组件的html—template中的用法示例:
<my-text-component my-directive>
所以'MyDirective'类中的'component'属性变成了'my—text—component'.
问题是,虽然单位测试与Jest .
单元测试的空框架代码如下所示:
describe("MyDirectiveTest", () => {
let directive: MyDirective;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [MyDirective, MyBaseComponent, MyTextComponent],
providers: [{ provide: MyBaseComponent, useClass: MyTextComponent }],
});
directive = new MyDirective();
});
it("should initialize correctly", () => {
expect(directive).toBeTruthy();
});
});
我得到了以下错误:
NG0203: inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with 100.
它准确地显示了代码行,其中inject()是错误的来源.
PS:
在建议将@ injection()decorator 添加到MyDirective之前,
我已经试过了,除了指令和组件是注射默认无论如何.