首页 > 解决方案 > 使用 Jasmine 测试 JSON 翻译文件

问题描述

我正在使用 ngx-translate 库在 Angular 应用程序上提供多种语言。在切换语言时发现几个缺失的翻译字符串后,我决定在包含翻译字符串的文件中添加一些基本测试。基本上,我想测试所有语言文件是否具有相同的键。

我的翻译文件被分隔在几个文件夹中:applabelswizards到目前为止),每个文件夹都包含一个es.jsonen.json文件。要测试所有文件,这就是我所做的:

i18n.spec.ts

fdescribe("i18n language files tests", () => {
  // Global app translations
  let appEs: any;
  let appEn: any;
  // Panels translations
  let panelsEs: any;
  let panelsEn: any;
  // Wizards translations
  let wizardsEs: any;
  let wizardsEn: any;

  beforeEach(() => {
    appEs = require('./app/es.json');
    appEn = require('./app/en.json');

    panelsEs = require('./panels/es.json');
    panelsEn = require('./panels/en.json');

    wizardsEs = require('./wizards/es.json');
    wizardsEn = require('./wizards/en.json');
  });

  it('should have the same keys for all language files', () => {
    // Global app translations
    let keysEs = getObjKeys(appEs);
    let keysEn = getObjKeys(appEn);
        
    expect(findMissingKeys(appEn, keysEs)).toEqual([]);
    expect(findMissingKeys(appEs, keysEn)).toEqual([]);

    // Panels translations
    keysEs = getObjKeys(panelsEs);
    keysEn = getObjKeys(panelsEn);
        
    expect(findMissingKeys(panelsEn, keysEs)).toEqual([]);
    expect(findMissingKeys(panelsEs, keysEn)).toEqual([]);

    // Wizards translations
    keysEs = getObjKeys(wizardsEs);
    keysEn = getObjKeys(wizardsEn);
        
    expect(findMissingKeys(wizardsEn, keysEs)).toEqual([]);
    expect(findMissingKeys(wizardsEs, keysEn)).toEqual([]);
  });
});

如您所见,我使用加载每个 JSON 文件require,然后,对于每对语言“部分”(应用程序、面板、向导),我获取其密钥并确保两种语言完全相同。

这工作正常,但是,由于require不适用于变量,代码非常重复,添加新的语言子文件夹真的很麻烦,因为我必须在代码的几个部分添加它。

关于如何简化此过程的任何想法?谢谢!

标签: angularjasmine

解决方案


推荐阅读