2017-08-02 95 views
1

當試圖測試使用翻譯的服務方法(在測試之外可以正常工作)時,我收到了我從TranslateService傳回的密鑰,而不是翻譯。單元測試中的ng2-translate返回鍵而不是翻譯

服務被測試(簡化最簡單的錯誤娛樂):

// The proper imports are here. 

@Injectable() 
export class SiteHeaderService { 
    private _titleText: BehaviorSubject<string> = new BehaviorSubject(""); 
    public readonly titleText: Observable<string> = this._titleText.asObservable(); 

    constructor(private translateService: TranslateService) {} 

    public updateTitleTextValue(text: string) { 
    this._titleText.next(text); 
    } 

    public setSettingsPageTitle() { 
    const title = this.translateService.instant("settings-page.page-name") || ""; 
    this.updateTitleTextValue(title); 
    } 
} 

測試本身:

import { TestBed, inject } from "@angular/core/testing"; 

import { SiteHeaderService } from "../site-header.service"; 

import { Http } from "@angular/http"; 
import { TranslateLoader, TranslateModule, TranslateStaticLoader } from "ng2-translate"; 

describe("SiteHeaderService",() => { 
    beforeEach(() => { 
    TestBed.configureTestingModule({ 
     imports: [ TranslateModule.forRoot({ 
     provide: TranslateLoader, 
     useFactory: (http: Http) => new TranslateStaticLoader(http, 'base/i18n', '.json'), 
     deps: [ Http ] 
     }) ], 
     providers: [ SiteHeaderService ] 
    }); 
    }); 

    it("should update the _titleText subject with the given value", inject([SiteHeaderService], (service: SiteHeaderService) => { 
    service.updateTitleTextValue("Firefly was canceled too soon!"); 
    service.titleText.subscribe(title => { expect(title).toEqual("Firefly was canceled too soon!"); }) 
    })); // Passes 

    it("should update all subjects to their 'settings page' state", inject([SiteHeaderService], (service: SiteHeaderService) => { 
    service.setSettingsPageTitle(); 
    service.titleText.subscribe(title => { expect(title).toEqual("Settings"); }) 
    })); // Fails: Expected 'settings-page.page-name' to equal 'Settings'. 

}); 

希望餘did't錯過在上面的縮短代碼的任何支架或分號,假設我沒有,如果你運行這個測試,第一個將通過,第二個將返回失敗:

Expected 'settings-page.page-name' to equal 'Settings'. 
+0

確定翻譯鍵是否正確('settings-page.page-name'),如在中,它與翻譯文件相匹配?粘貼鍵值對的某處。 –

+0

確實,用戶界面按預期加載,這只是測試有問題。 (如果我粘貼的東西,這將是一個非常簡單的JSON,因爲我沒有在這裏粘貼實際的代碼)。 –

回答

0

您應該設置您用於翻譯的語言。我有類似的問題。

translate.use('en'); 

解決了我的問題。

+0

無論出於何種原因,它仍然給我回密鑰,但在很多方面我開始喜歡這個事實,因爲我通常並不關心確切的文本是什麼,因爲只要業務決定改變它就會改變,而且它是分開的從測試的邏輯方面來看。 –