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'.
確定翻譯鍵是否正確('settings-page.page-name'),如在中,它與翻譯文件相匹配?粘貼鍵值對的某處。 –
確實,用戶界面按預期加載,這只是測試有問題。 (如果我粘貼的東西,這將是一個非常簡單的JSON,因爲我沒有在這裏粘貼實際的代碼)。 –