angular - 使用 Jasmine 测试 JSON 翻译文件
问题描述
我正在使用 ngx-translate 库在 Angular 应用程序上提供多种语言。在切换语言时发现几个缺失的翻译字符串后,我决定在包含翻译字符串的文件中添加一些基本测试。基本上,我想测试所有语言文件是否具有相同的键。
我的翻译文件被分隔在几个文件夹中:app
和labels
(wizards
到目前为止),每个文件夹都包含一个es.json
和en.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
不适用于变量,代码非常重复,添加新的语言子文件夹真的很麻烦,因为我必须在代码的几个部分添加它。
关于如何简化此过程的任何想法?谢谢!
解决方案
推荐阅读
- xamarin.forms - Xamarin Forms UWP:访问文件夹中的所有文件
- java - 如何在 Hibernate 中存储 HashMap - MySQL
- ios - 故事板中的 Segues 问题
- python - 提交 Flask WTForms 时,如何在不从数据库表中删除这些值的情况下将字段留空?
- javascript - sinon 监视回调
- salesforce - 使用 APEX 每周发送电子邮件模板
- google-apps-script - 一天内服务调用次数过多:urlfetch 尚未打开 Google 表格
- ruby-on-rails - 在这个例子中,为什么服务器发送事件中有一个循环?
- bash - 如何停止 bash 引用引号?
- arrays - 如何将 Go 结构的一部分定义为 JSON 字符串?