我们都同意 WordPress 从一开始就已经走过了漫长的道路,而且它发展成为的不仅仅是博客软件。
它的核心仍然是一个内容管理系统 (CMS),但它拥有超过 59,000 个插件 wordpress.org 目录,您可以自定义更多。
它受欢迎的原因是它对内容创建者和开发者的准入门槛低。 有时这需要付出代价。 WordPress 在开发方面名声不佳,这已不是什么秘密。 它有很多遗留的包袱和顽固的规则,可以防止在涉及 PHP 代码时发生任何向后兼容性的破坏性更改(Gutenberg 是另一个我不会讨论的故事)。
那些开始进入编程世界的开发人员经常使用遗留的 PHP 代码,问题是他们可以学习一些糟糕的编程模式。 这反过来意味着他们将重用编写不佳的代码,从而增加世界上糟糕代码的数量。
这就是 WordPress 在开发者社区中名声不佳的地方。
打破循环
那么我们如何才能打破这种糟糕代码的循环呢? 通过教新开发人员如何编写好的代码。 教新开发人员(以及仍然坚持“WordPress”做事方式的老开发人员)的一个例子是编写教程。
另一种方法是鼓励他们使用可以帮助他们编写更好代码的工具。
我目前正在参与旨在发布新版本的工作 WordPress 编码标准,一组规则用于 PHP_CodeSniffer 如果您的代码存在一些潜在问题(安全性、最佳实践、代码风格),该工具会让您知道。
我最近开发的另一个工具是 包裹 这将帮助开发人员设置使用 害虫 测试框架。
好的,那么为什么我们需要这个新工具呢?
创建这个包的主要动机是鼓励更多的人为他们的代码编写测试,尤其是插件开发人员。
WordPress 社区中的许多开发人员都遵循这样的口头禅:我可以看到它有效,因为我已经在我的浏览器中尝试过了。 没关系,但是这样做有问题。
首先,它很耗时。 每次你做出一些改变,你都需要确保它有效,而且你没有破坏任何东西。
其次,人会犯错。 我们并非万无一失,代码可能会以您从未想过的方式被滥用。 您会惊讶于人们在编写代码时的创造力。
自动化测试速度很快,可以帮助您测试执行代码时会发生的各种情况。
您测试预期的行为(快乐路径),并且可以快速添加示例,说明如何以您不希望使用的方式使用您的代码(不快乐路径)。
它还可以保护您的代码免受回归。 代码回归是指您通过添加新代码无意中破坏了代码的一部分。
到目前为止设置的测试问题
在 WordPress 中进行测试并不是什么新鲜事。 并不是说您以前无法为您的代码设置测试。 那里有很棒的库可以帮助您设置所有内容,例如 wp浏览器.
但问题是设置过程通常很笨拙。
您需要为测试设置一个单独的数据库,并且您需要运行某些脚本,然后更改文件以使其全部工作。
面对现实吧,这不是一件简单的事情,开发人员天生就是懒惰的生物(这就是我们编写代码为我们做事的原因😄)。
wp-pest 集成测试设置的目的是消除所有额外的工作。
如何设置
为了设置它,您的项目必须使用 作曲家. 这是将包添加到代码中的事实上的标准方式。
在您的终端类型中
作曲家需要 dingo-d/wp-pest-integration-test-setup –dev
下载包及其依赖项后,您可以通过键入来设置主题测试
vendor/bin/wp-pest 设置主题
或者,如果您想为插件设置测试,您可以编写
供应商/bin/wp-pest 设置插件 –plugin-slug=your-plugin-slug
或者,您可以提供 –wp-version 参数,以指定您想在哪个 WordPress 版本上测试您的代码。
在后台,将下载一个 WordPress 实例,并设置一个内存数据库,以及您可以运行的两个测试示例。
然后,运行
供应商/bin/害虫 –group=unit
或者
供应商/bin/害虫–group=integration
将运行测试。
Pest 的美妙之处在于它的语法对开发人员友好。 它有 惊人的文档 和伟大的语法。 让我们看一个简单的例子。 假设您正在注册一个名为“书籍”的自定义帖子类型:
esc_html__( ‘Books’, ‘test-plugin’ ), ‘public’ => true, ‘publicly_queryable’ => true, ‘show_ui’ => true, ‘show_in_menu’ => true, ‘query_var’ => true, ‘rewrite’ => array(‘ slug’ => ‘book’ ), ‘capability_type’ => ‘post’, ‘has_archive’ => true, ‘hierarchical’ => false, ‘menu_position’ => null, ‘supports’ => array(‘title’, ‘编辑’,’作者’,’缩略图’,’摘录’,’评论’),); register_post_type(‘书’,$args); } add_action(‘init’, ‘test_plugin_register_books_cpt’);
运行添加示例的 setup 命令后,名为 BooksCptTest.php 的测试将如下所示:
assertNotFalse(has_action(‘init’, ‘test_plugin_register_books_cpt’)); $registeredPostTypes = \get_post_types(); // 或者我们可以使用 Pest 的期望 API。expect($registeredPostTypes) ->toBeArray() ->toHaveKey(‘book’); });
运行 vendor/bin/pest –group=integration 给我们以下输出:
安装…作为单个站点运行…要运行多站点,请使用 -c tests/phpunit/multisite.xml 不运行 ajax 测试。 要执行这些,请使用 –group ajax。 不运行 ms-files 测试。 要执行这些,请使用 –group ms-files。 不运行 external-http 测试。 要执行这些,请使用 –group external-http。 PASS Tests\\Integration\\BooksCptTest ✓ Books 自定义帖子类型已注册测试:1 通过时间:0.14s
结论
就像这样,您可以在您的主题或插件中运行 WordPress 集成测试。 测试之所以令人惊奇,是因为它们不仅可以保护我们免于错误,还可以迫使我们编写干净且可测试的代码。 对于逻辑复杂或与第三方 API 通信的插件尤其如此。
为这样的代码库编写测试将迫使您考虑您的代码架构是什么样的,以便您可以轻松编写自动化测试 – 更不用说您不必手动测试所有内容所节省的时间和金钱。
如果您认为这是您可能会从中受益的东西,请随意使用它,并且 为存储库加注星标 在 GitHub 上。
希望这将鼓励更多的 WordPress 开发人员使用能够提高他们编码技能的工具。