2016-04-15 66 views
2

我試圖測試所有標籤當然都是本地化的組件。 我知道編寫測試的最好方法是模擬依賴關係,但在這種情況下,依賴關係(其中之一)是一種翻譯服務,我認爲我想在我的測試中注入(而不是模擬)。該服務在應用程序中引導,因此我設法將其注入到我的測試中。組件測試中的翻譯服務

翻譯,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:因果報應找不到語言環境文件加載

http://localhost:9876/assets/i18n/en.json無法加載資源:服務器響應狀態爲404(未找到)

問題2:即使我將加載該文件,我不知道我的組件是否會得到這些標籤。

我已經看到她的一些想法(堆棧),但他們都是我不熟悉的Angular 1,而且都是Angular 2的新成員。

感謝您的意見!

回答

0

關於第一個問題:

在我看來,從資產/ i18n的'那個負荷不起作用,因爲善緣服務器通常加在前面的「基地」前綴。

我假設正確的路徑是'base/assets/i18n'或'base/distfolder/assets/i18n'