Тестирование JSON файлов перевода с помощью Jasmine - PullRequest
0 голосов
/ 10 июля 2020

Я использую библиотеку ngx-translate для поддержки нескольких языков в приложении Angular. Обнаружив пару недостающих переведенных строк при переключении языка, я решил добавить несколько базовых c тестов в файлы, содержащие переведенные строки. По сути, я хочу проверить, что все языковые файлы имеют одинаковые ключи.

Мои файлы перевода разделены в несколько папок: app, labels и wizards (пока), с каждой папкой содержащий файлы es.json и en.json. Чтобы проверить все файлы, я делаю следующее:

i18n.spe c .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 не работает с переменными, код довольно повторяющийся, и добавление новой языковой подпапки действительно громоздко, так как я должен добавить ее в несколько частей кода.

Любой идеи о том, как я могу упростить этот процесс? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...