Статические классы имеют запах кода в JavaScript.Если класс никогда не создается, то в этом нет необходимости.
Это один из случаев, к которым должен обращаться Angular DI.Он должен быть реорганизован в сервис, а не в класс, который используется напрямую.
class LocaleService {
public lang: string;
private messages = {...};
public instant(key: string) {
return this.messages[key][this.lang];
}
}
...
providers: [LocaleService, ...]
...
Затем его можно сменить с помощью DI.Для повторного использования макет может быть определен как провайдер:
const LOCALE_SERVICE_MOCK = {
provide: LocaleService,
useFactory: () => ({
instant: jasmine.createSpy('instant').and.callFake(msg => msg)
})
};
и указываться в тестовом стенде:
beforeEach(() => {
TestBed.configureTestingModule({ providers: [LOCALE_SERVICE_MOCK]});
});
или быть завернутым в модуль:
beforeEach(() => {
TestBed.configureTestingModule({ imports: [LocaleServiceMockModule]});
});
В своем текущем состоянии код можно сделать DRYer, переместив код многократного использования в функцию:
function mockLocaleService() {
const localeServiceInstantSpy = spyOn(LocaleService, 'instant');
localeServiceInstantSpy.and.callFake(msg => msg);
}
И используя его при необходимости:
beforeEach(mockLocaleService);