Проверьте, правильно ли были установлены данные с помощью Jasmine - PullRequest
0 голосов
/ 15 октября 2019

У меня есть услуга:

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, но это сервис, а не компонент, поэтому его использование некорректно. Во всяком случае, я все еще плохо знаком с внешними испытаниями, поэтому я хотел бы услышать, что вы будете делать.

Или я должен просто получить активный язык в том же тесте? Так как есть и другие методы, я хотел, чтобы каждый тест проходил вместо одного огромного теста

1 Ответ

1 голос
/ 15 октября 2019

В настоящее время ваш LanguageService создается каждый раз снова в beforeEach, поэтому вы должны проверить активный язык в тесте, который ранее вызывал LanguageService#load. Вероятно, вам также нужен await перед LanguageService#load.

await testee.load(lang);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...