。
答案: 在Angular 7中,单元测试依赖注入在ngOnInit中不起作用的原因是,单元测试的目的是测试组件的逻辑,而ngOnInit是在组件生命周期的初始化阶段调用的钩子函数,用于初始化组件的属性和依赖注入。
在单元测试中,我们可以通过手动创建一个组件实例,并通过构造函数注入依赖。但是,在ngOnInit函数中的依赖注入无法在单元测试中进行,因为它需要由Angular框架自动完成。
为了解决这个问题,我们可以使用Angular提供的测试工具和技术,例如TestBed和fakeAsync,来模拟依赖注入和异步操作。
在编写单元测试之前,我们需要在测试文件的顶部导入相关的测试模块:
import { TestBed, async, ComponentFixture } from '@angular/core/testing'; import { Component } from '@angular/core';
然后,我们可以编写一个测试用例来测试ngOnInit函数中的依赖注入是否正常工作:
describe('MyComponent', () => { let component: MyComponent; let fixture: ComponentFixture<MyComponent>;
beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ MyComponent ] }) .compileComponents(); }));
beforeEach(() => { fixture = TestBed.createComponent(MyComponent); component = fixture.componentInstance; fixture.detectChanges(); });
it('should inject dependencies in ngOnInit', () => { // 模拟依赖注入 const dependency = TestBed.get(MyDependency);
}); });
在这个测试用例中,我们使用TestBed.configureTestingModule来配置测试环境,并使用compileComponents来编译组件。然后,我们创建一个组件实例,并通过TestBed.get来获取依赖注入的实例。接下来,我们调用ngOnInit函数,并断言依赖是否成功注入。
总结: 在Angular 7中,单元测试依赖注入在ngOnInit中不起作用的原因是,ngOnInit是在组件初始化阶段调用的钩子函数,无法在单元测试中自动完成依赖注入。为了解决这个问题,我们可以使用Angular提供的测试工具和技术,例如TestBed和fakeAsync,来模拟依赖注入和异步操作。在编写单元测试时,需要手动注入依赖并调用ngOnInit函数,然后断言依赖是否成功注入。
领取专属 10元无门槛券
手把手带您无忧上云