2

我怀疑这将是一个重复的问题或一个非常简单的答案,但我已经搜索了我能想出的每个术语,但没有任何结果。

这真的很简单;如何对依赖于其他插件的 WordPress 插件进行单元测试?

我目前正在开发一个包含支付网关的 WooCommerce 插件,该插件必须扩展WC_Payment_GatewayWooCommerce 插件中包含的内容。所以我需要 WordPress 来加载和激活WooCommerce。我试过了;

  1. 手动只包括/plugins/woocommerce/woocommerce.php. 由于尚未创建 WooCommerce 表,因此给我 db 错误。
  2. 运行activate_plugin( '<woocommerce plugin path>' );"muplugins_loaded"动作上。给出与上述相同的错误。
  3. 克隆 WooCommerce 开发者。回购并包括test/bootstrap.php在woocommerce中。给我一个 PHP 致命错误:wp-content/plugins/woocommerce/tmp/wordpress-tests-lib/includes/functions.php): failed to open stream: No such file or directory in /home/...
  4. 运行/plugins/woocommerce/tests/bin/install.sh。给我PHP Fatal error: Cannot redeclare tests_add_filter() (previously declared in ...
  5. 以上的组合

有人知道我在做什么错吗?我真的不想放弃单元测试,但目前似乎是唯一的选择,因为我在插件中遇到了致命的 b/c 某些类,即类型提示支付网关,这显然会强制自动加载器获取它。

提前致谢 :)

4

2 回答 2

2

我只是花了几个小时试图弄清楚这一点,并最终到达了那里。将这个答案留给其他正在寻找的人。

本指南很好地解释了该过程:https ://wptheming.com/2016/01/unit-tests-for-woocommerce-extensions/

基本上,您可以将整个 woocommerce 测试套件复制到您的扩展文件夹中,并对引导文件中的初始化进行一些调整,以便一起加载 woocommerce 和您的扩展。

于 2018-01-18T18:10:07.917 回答
1

我最终在一个特殊文件夹中创建了“依赖替换”(模拟)类,该文件夹仅注册到测试环境中的自动加载器(不是 dev/prod 以防止与真实类发生冲突)。

我认为这是一个非常丑陋的解决方案,因为即使我们依赖的 api 更改并破坏了应用程序,测试也会通过 - 破坏了 imo 进行单元测试的全部意义。但是你知道..在爱情和战争中一切都是公平的,哈哈

于 2015-10-14T07:45:26.697 回答