问题描述

我的目标是什么?

我期待为 WordPress 插件的可用翻译编写测试用例。

我的方法:

我已经使用 VVV 设置 WordPress,我的测试套件包括 PHPUnitWP-CLI

为了测试 (断言) 翻译,我检查该语言的.mo 文件是否存在。

/**
 * Test the translations.
 */
public function test_translations() {
    $this->assertFileExists( $this->object->path . 'lang/domain-name-de_DE.mo' );
    $this->assertFileExists( $this->object->path . 'lang/domain-name-lt_LT.mo' );
    $this->assertFileExists( $this->object->path . 'lang/domain-name-nl_NL.mo' );
}

我被困在哪里

这是对于 WordPress 插件测试 translations 的正确方法吗?如果没有,请提出替代方案。

最佳解决思路

如果您想要测试的是翻译文件存在,那么这可能是最简单的方法,因为您可能已经在使用 PHPUnit 来运行插件代码上的单元/集成测试。

但是,只是检查文件是否存在并没有告诉你。它不会告诉你这些语言是否实际完全翻译,或者即使这些文件将被 WordPress 正确加载。

所以你需要问的问题是:「为什么要测试?如果您只是想确保您不会意外遗漏翻译文件,那么您的测试应该做你所需要的。如果您希望确实能够为每种语言提供完整的翻译,而且这些翻译实际上是有效的,那就是一个完全不同的故事。

测试翻译加载

要检查 WordPress 是否能正确加载每个翻译文件,您可能会创建一个使用 load_plugin_textdomain()加载文件的 PHPUnit 测试,并检查它是否返回 true,这将表明文本域可以正确加载。您可能需要挂接到 plugin_locale 过滤器来检查您的插件附带的每个区域设置。

测试完整性

然而,仍然不会告诉你有多少字符串实际上被翻译成该语言,有多少是模糊的。如果你想检查每个翻译是否至少 xx%完成,你可能想要使用一个不是 PHPUnit 的工具。

测试外观

您还可以进一步检查每个翻译中的字符串是否在插件 UI 中正确显示。有时字符串的翻译可能比原始语言长得多,这可能会导致它溢出为其分配的区域。要检查这一点,您需要使用类似 Codeception 验收测试。

结论

因此,总而言之,您所拥有的测试是否适合您,取决于您要测试的内容。就个人而言,我没有任何测试我的插件的翻译,虽然最后一部分关于检查 UI 吸引了我。只是检查翻译是否存在,正如你现在所做的,对我来说似乎没有提供很多的好处。它是一个支票,只有你正在检查的翻译文件列表一样好。在某种意义上,它并没有测试任何东西,只是确保它在那里。这可以在构建脚本而不是 PHPUnit 中执行。检查翻译实际上可以由 WordPress 加载确实为 IMO 提供了好处,因为它实际上测试它们没有被破坏。当然,它测试它们同时存在。所以我可能会扩大你的测试来检查。

Edit

在相关说明中,您可能还会考虑测试主 POT 中的任何拼写错误 (我也猜测翻译也是如此) 。这很容易在雷达下滑落。可能有可用的 shell 脚本可以做到这一点。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。