angular - 如何在Angular的构造函数中使用@Inject文本测试组件
问题描述
Angular 6,我在组件的构造函数中声明了一些注入变量,但是我不知道如何在单元测试文件中配置注入值,当我运行时ng test
,它给出了以下错误:
错误:StaticInjectorError(DynamicTestModule)[title]:
StaticInjectorError(Platform: core)[title]: NullInjectorError: No provider for title!
//我的组件
export class ConfirmModalComponent extends BaseModal implements OnInit {
choosedCandidates: Array<any> = [];
constructor(
@Inject('title') public title,//injected variable
protected modalService: ModalService
) {
super();
}
ngOnInit() {
}
....
}
//spec file of my component
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ DelInterviewerConfirmModalComponent ],
imports: [ CheckboxModule, TranslateModule ],
providers: [
{ provide: title, useValue: 'modal title' },
ModalService,
RequisitionDetailService ],
schemas: [ CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA ],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(DelInterviewerConfirmModalComponent);
component = fixture.componentInstance;
component.title = "test";
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
我想知道是否有人遇到同样的问题以及如何解决错误,在此先感谢。
解决方案
日期、数字和字符串等值必须包装到Injection Token中。
1.:创建注入令牌:
export const TITLE = new InjectionToken<string>('title');
2.:像现在这样注入:
constructor(@Inject(TITLE) private title: string)
3.:在您的测试中,使用 InjectionToken 模拟它:
TestBed.configureTestingModule({
declarations: [ DelInterviewerConfirmModalComponent ],
imports: [ CheckboxModule, TranslateModule ],
providers: [
{ provide: TITLE, useValue: 'modal title' },
推荐阅读
- javascript - 调用jQuery插件函数时,第一次调用成功,但再次运行,调用失败
- jpa - QueryDsl JPA 在 from 子句中使用子查询
- python - jmespath:区分未找到的键和具有空值的键
- javascript - 打印:并排分割
- excel - 计算一个范围内的唯一非空白条目
- angular - Angular 6:没有用于服务的单例并将信息传递给配置模块
- android - Google Chrome 开发者工具:Android 调试返回 HTTP/1.1 404 Not Found。为什么?
- r - 将字符转换为数字
- javascript - 无法解析类中的方法
- javascript - 当站在当前扇区 (id) 上时,菜单链接会在一页网站上突出显示。