У меня есть компонент, который имеет две зависимости: одна LOCALE_ID
определена глобально в угловом формате, другая - это язык, определенный в Компоненте как { provide: LANGUAGE_TOKEN, useValue: navigator.language }
Для тестирования я оба переопределяю их вTestBed для всех тестов, поэтому тесты не вводят ничего из браузера Chrome, выполняющего тесты кармы, и тесты не имеют других результатов в зависимости от среды тестирования:
TestBed.configureTestingModule({
declarations: [
MyComponent, RouterStubComponent,
],
imports: [
MatToolbarModule, RouterTestingModule, MatIconModule, MatButtonModule,
],
providers: [
{provide: LOCALE_ID, useValue: 'en-US' },
]
}).compileComponents();
TestBed.overrideProvider(LOCATION_TOKEN, {useValue: locationStub});
TestBed.overrideProvider(LANGUAGE_TOKEN, {useValue: 'en-US' });
Теперь у меня есть некоторая логика вкомпонент, который зависит от локали и языка браузера, поэтому мне нужно издеваться над ними. Насмешка LANGUAGE_TOKEN
была супер легкой, просто неудобством:
it('should redirect to spanish when in spanish browser', () => {
TestBed.overrideProvider(LANGUAGE_TOKEN, {useValue: 'es'});
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
fixture.detectChanges();
expect(hrefSpy.calls.count()).toBe(1);
expect(hrefSpy.calls.argsFor(0)[0]).toEqual(environment.spanUrl);
});
Однако переопределение LOCALE_ID
с тем же кодом не работает.
it('should ...', () => {
TestBed.overrideProvider(LOCALE_ID, {useValue: 'es-ES'});
console.log(TestBed.get(LOCALE_ID)); // en-US!!!!
fixture = TestBed.createComponent(MamanComponent);
component = fixture.componentInstance;
fixture.detectChanges();
expect(hrefSpy.calls.count()).toBe(1); //FAIL
expect(hrefSpy.calls.argsFor(0)[0]).toEqual(environment.engUrl);//FAIL
});
Мне не удалось найти работающийответьте на этот вопрос либо.