组件测试中的翻译服务

时间:2016-04-15 15:24:44

标签: angular karma-jasmine

我正在尝试测试一个组件,其中所有标签当然是本地化的。 我知道编写测试的最好方法是模拟依赖项,但在这种情况下,依赖项(其中之一)是一个翻译服务,我想我想在我的测试中注入(而不是模拟)。这项服务是在应用程序中引导的,所以我设法将它注入我的测试中。

翻译-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的新手)。

感谢您的任何意见!

0 个答案:

没有答案