小编use*_*276的帖子

Angular 7 TestBed.overrideProvider 不适用于 ActivateRoute

我正在使用带有 Jest 的 Angular 7,并且正在模拟组件的提供者。很多时候我需要在TestBed编译后更改注入到组件中的内容,并且使用此代码执行此操作没有任何问题:

TestBed.configureTestingModule({...});
await TestBed.compileComponents();

... some code
TestBed.overrideProvider(SecurityService, {useValue: mockSecurityService});
fixture = TestBed.createComponent(LoginComponent);
fixture.detectChanges()
Run Code Online (Sandbox Code Playgroud)

当我这样做时,新的 mockSecurityService 包含在我的组件中,正如我所期望的那样。但是......这真的很奇怪......无论我做什么,这种方法都不适用于ActivatedRoute。因此,如果我更改 mockActivatedRoute 并添加以下代码行:

TestBed.overrideProvider(ActivatedRoute, {useValue: mockActivatedRoute});
TestBed.overrideProvider(SecurityService, {useValue: mockSecurityService});
fixture = TestBed.createComponent(LoginComponent);
fixture.detectChanges()
Run Code Online (Sandbox Code Playgroud)

该组件使用它获得的第一个 mockActivatedRoute 类进行实例化,无论之后调用 overrideProvider 多少次,第一个对象都会获得。

这真的很奇怪,因为完全相同的代码路径适用于我的 mockSecurityService 以及 Angular Router 服务的模拟。ActivatedRoute 类是否存在导致 TestBed 忽略覆盖的内容?我单步执行代码,看不出有什么区别;据我所知, overrideProviderMap 正在获取 ActivatedRoute 覆盖,但组件实例化仍然忽略它。

jestjs angular angular7

7
推荐指数
1
解决办法
2386
查看次数

标签 统计

angular ×1

angular7 ×1

jestjs ×1