2017-08-02 93 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

无论出于何种原因,它仍然给我回密钥,但在很多方面我开始喜欢这个事实,因为我通常并不关心确切的文本是什么,因为只要业务决定改变它就会改变,而且它是分开的从测试的逻辑方面来看。 –