我有服务:
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
,但这是服务而不是组件,因此使用它似乎并不正确。无论如何,我还是前沿测试的新手,所以我很想听听您会做些什么。
还是应该在同一测试中获得使用中的语言?由于还有其他方法,因此我想为每个测试而不是一个巨大的测试
答案 0 :(得分:1)
当前,您的LanguageService
每次都在beforeEach
中再次创建,因此您应该在以前调用LanguageService#load
的测试中测试活动语言。可能还需要在await
前面加上一个LanguageService#load
。
await testee.load(lang);