这是由于在测试之前没有正确配置测试环境造成的。
解决方案之一是,在测试文件中导入所需的模块和提供程序。例如,如果您的测试文件中使用了ActivatedRoute,您需要在导入的模块中包含RouterTestingModule并在提供程序中添加ActivatedRoute。
下面是一个示例代码,演示如何在测试文件中正确配置活动路由:
import { RouterTestingModule } from '@angular/router/testing';
import { ActivatedRoute } from '@angular/router';
describe('MyComponent', () => {
let component: MyComponent;
let fixture: ComponentFixture;
let activatedRoute: ActivatedRoute;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [ RouterTestingModule ],
declarations: [ MyComponent ],
providers: [
{
provide: ActivatedRoute,
useValue: { snapshot: { data: { title: 'Test Title' } } }
}
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
activatedRoute = TestBed.inject(ActivatedRoute);
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
it('should have correct title', () => {
expect(component.title).toEqual('Test Title');
});
});
在上面的代码示例中,我们首先导入了RouterTestingModule和ActivatedRoute,并将它们添加到测试模块中。然后,在提供程序中,我们创建了一个ActivatedRoute实例,并使用该实例的快照属性设置标题。最后,在beforeEach块中,我们调用了TestBed.inject来注入ActivatedRoute。
通过这些步骤,我们现在可以在测试中正确使用ActivatedRoute,并且不再遇到NullInjectorError和TypeError错误。