在Angular 7中,TestBed.overrideProvider
对ActivatedRoute
不起作用的原因是,ActivatedRoute
是由RouterTestingModule
提供的,并且在编译时已经被预先配置好了。
要解决这个问题,可以使用RouterTestingModule.withRoutes([])
方法来创建自定义的路由配置,并在TestBed.configureTestingModule
中使用这个配置来替代预先配置的路由。
以下是一个示例代码,演示如何使用TestBed.overrideProvider
覆盖ActivatedRoute
:
import { TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { ActivatedRoute } from '@angular/router';
describe('YourComponent', () => {
let activatedRoute: ActivatedRoute;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [RouterTestingModule.withRoutes([])],
providers: [
{
provide: ActivatedRoute,
useValue: {
snapshot: {
paramMap: {
get: (key: string) => {
// return the value based on your test case
}
}
}
}
}
]
});
// Get the injected instance of ActivatedRoute
activatedRoute = TestBed.get(ActivatedRoute);
});
it('should do something with ActivatedRoute', () => {
// Write your test case using activatedRoute
});
});
在上述示例中,我们使用RouterTestingModule.withRoutes([])
方法创建了一个自定义的路由配置。然后,我们使用TestBed.configureTestingModule
配置了ActivatedRoute
的覆盖提供者,并返回了一个虚拟的ActivatedRoute
实例,以便在测试中使用。
请根据你的测试需求对示例代码进行适当的修改,并根据你的测试场景使用ActivatedRoute
的不同属性和方法。