在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的不同属性和方法。