【问题标题】:ng2-translate in unit test returns keys instead of translations单元测试中的 ng2-translate 返回键而不是翻译
【发布时间】:2017-08-02 23:15:50
【问题描述】:

当尝试测试使用翻译的服务方法(在测试之外工作正常)时,我收到了从 TranslateService 传回的密钥,而不是翻译。

正在测试的服务(为了最简单的错误重现而进行了简化):

// 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'.

});

希望我在上面的缩短代码中没有遗漏任何大括号或分号,假设我没有如果您运行此测试,第一个将通过,第二个将返回失败:

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

【问题讨论】:

  • 你确定翻译键是正确的('settings-page.page-name'),它与翻译文件匹配吗?将键值对粘贴到某处。
  • 确实如此,用户界面按预期加载,只是测试有问题。 (如果我粘贴了一些东西,那将是一个非常简单的 json,因为我没有在此处粘贴实际代码)。

标签: angular ng2-translate


【解决方案1】:

您应该设置用于翻译的语言。我有类似的问题。

translate.use('en');

解决了我的问题。

【讨论】:

  • 无论出于何种原因,它仍然会给我返回密钥,但在很多方面我已经开始喜欢这个事实,因为我通常并不关心确切的文本是什么,因为它会在业务决定时改变改变它,它与测试的逻辑方面是分开的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多