我正在尝试测试一个组件,其中所有标签当然是本地化的。 我知道编写测试的最好方法是模拟依赖项,但在这种情况下,依赖项(其中之一)是一个翻译服务,我想我想在我的测试中注入(而不是模拟)。这项服务是在应用程序中引导的,所以我设法将它注入我的测试中。
翻译-service.ts
import { Injectable } from 'angular2/core';
import { TranslateService } from 'ng2-translate';
@Injectable()
export class TranslationService {
constructor( private _translate: TranslateService ) {
//
}
instant( key: string ) {
return this._translate.instant( key );
}
use( lang: string ) {
this._translate.use( lang );
}
...
和我的测试:
describe('Login form', () => {
beforeEachProviders(() => [
ROUTER_PROVIDERS,
HTTP_PROVIDERS,
provide(Router, { useClass: MockRouter }),
TranslateService,
TranslationService,
provide(LoginService, {useClass: MockLoginService}),
provide(TranslateLoader, {
useFactory: (http: Http) => new TranslateStaticLoader(http, 'assets/i18n', '.json'),
deps: [Http]
}),
ModuleLoaderService
]);
it('should check translated labels', injectAsync([TestComponentBuilder], (tcb) => {
return tcb.createAsync(LoginComponent).then((fixture) => {
fixture.detectChanges();
let compiled = fixture.debugElement.nativeElement;
console.log('cccccc', compiled);
expect(true).toBe(true);
});
}));
});
问题1:Karma找不到要加载的语言环境文件
http://localhost:9876/assets/i18n/en.json无法加载资源:服务器响应状态为404(未找到)
问题2:即使我要加载该文件,我也不确定我的组件是否会获得这些标签。
我在她(Stack)中看到了一些想法,但它们都是我不熟悉的Angular 1(而且是Angular 2的新手)。
感谢您的任何意见!