У меня есть услуга:
import { EventEmitter, Injectable } from '@angular/core';
@Injectable()
export class LanguageService {
protected activeLanguage = '';
constructor(protected translateService: TranslateService) {
}
async load(userLanguage: string) {
userLanguage = String(userLanguage).toLowerCase();
this.activeLanguage = userLanguage;
await this.translateService.use(this.activeLanguage).toPromise();
}
getActiveLanguage(): string[] {
return this.activeLanguage;
}
}
Я хочу проверить, правильно ли установлен активный язык. Вот как я пытался это сделать:
import { TestBed, getTestBed } from '@angular/core/testing';
import { LanguageService } from './language.service';
fdescribe('LanguageService', () => {
let injector: TestBed;
let testee: LanguageService;
beforeEach(async () => {
TestBed.configureTestingModule({
//...
});
injector = getTestBed();
testee = injector.get(LanguageService);
});
it('should create', async () => {
expect(testee).toBeTruthy();
});
it('should load configuration', async () => {
const lang = 'en';
const languageServiceSpy = spyOn(testee, 'load').and.callThrough();
// make sure they haven't been called yet
expect(languageServiceSpy).not.toHaveBeenCalled();
testee.load(lang);
expect(languageServiceSpy).toHaveBeenCalledTimes(1);
});
it('should return active language', async () => {
const activeLanguage = testee.getActiveLanguage();
expect(activeLanguage).toEqual('en');
});
Однако мой тест завершается неудачно с ошибкой Error: Expected '' to equal 'en'.
Как сохранить результат первого теста?
Я знаю, что ComponentFixture
где выможет вызвать detectChanges
, но это сервис, а не компонент, поэтому его использование некорректно. Во всяком случае, я все еще плохо знаком с внешними испытаниями, поэтому я хотел бы услышать, что вы будете делать.
Или я должен просто получить активный язык в том же тесте? Так как есть и другие методы, я хотел, чтобы каждый тест проходил вместо одного огромного теста