WordPress插件phpunit测试依赖项

时间:2015-10-13 09:51:10

标签: wordpress unit-testing woocommerce phpunit wp-cli

我怀疑这是一个重复的问题,或者是一个回答非常简单的问题,但我已经搜索了我能提出的每一个条款而没有任何结果。

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

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

  1. 手动包含/plugins/woocommerce/woocommerce.php。由于尚未创建WooCommerce表,因此给出了db错误。
  2. activate_plugin( '<woocommerce plugin path>' );操作上运行"muplugins_loaded"。给出与上面相同的错误。
  3. 克隆WooCommerce开发。回购并在woocommerce中加入test/bootstrap.php。给我一个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. 以上的组合
  6. 任何人都知道我做错了什么?我真的不想放弃单元测试,但目前似乎是唯一的选择,因为我在我的插件中使用某些类来致命,即类型暗示支付网关显然迫使自动加载器获取它。

    提前致谢:)

2 个答案:

答案 0 :(得分:1)

我最终创建了&#34;依赖替代&#34; (模拟)特殊文件夹中的类,它只在注册到测试环境中的自动加载器(不是dev / prod,以防止与真实类冲突)。

我认为这是一个非常难看的解决方案,因为即使我们依赖的api改变并打破了应用程序,测试也会通过 - 打破了单元测试的全部要点。但是你知道..所有在爱和战争中都是公平的哈哈

答案 1 :(得分:1)

我花了好几个小时试图解决这个问题,并最终到达那里。将此答案留给其他任何正在寻找的人。

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

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