Я использую Angular 7 w / Jest и проверяю поставщиков на компоненты.Во многих случаях мне нужно изменить то, что вводится в компоненты после компиляции TestBed
, и у меня не было проблем с этим кодом:
TestBed.configureTestingModule({...});
await TestBed.compileComponents();
... some code
TestBed.overrideProvider(SecurityService, {useValue: mockSecurityService});
fixture = TestBed.createComponent(LoginComponent);
fixture.detectChanges()
Когда я делаю это, НОВЫЙ mockSecurityService включен в мой компонент, как я и ожидал.Но ... и это действительно странно ... этот метод НЕ работает для ActivatedRoute, независимо от того, что я делаю.Поэтому, если я изменю mockActivationRoute и добавлю следующую строку кода:
TestBed.overrideProvider(ActivatedRoute, {useValue: mockActivatedRoute});
TestBed.overrideProvider(SecurityService, {useValue: mockSecurityService});
fixture = TestBed.createComponent(LoginComponent);
fixture.detectChanges()
Компонент создается с помощью первого полученного им класса mockActivationRoute, и независимо от того, сколько раз вызывается overrideProvider после этого, первый объект получаетстоит.
Это действительно странно, потому что точно такой же путь кода работает для моего mockSecurityService, а также для макета службы Angular Router.Есть ли что-то в классе ActivatedRoute, который заставляет TestBed игнорировать переопределения?Я прошел по коду и не вижу никакой разницы;насколько я могу судить, overrideProviderMap получает переопределение ActivatedRoute, но, тем не менее, экземпляр компонента игнорирует его.