Symfony PHPUnit Bridge:获取Drupal8模块中具体弃用通知详情
解决Drupal 8模块PHPUnit测试中Symfony弃用提示无详情的问题
我之前在Drupal自定义模块的PHPUnit测试里也碰到过一模一样的情况——只看到弃用数量,却找不到具体触发的代码行,折腾了好一阵子才找到靠谱的解决办法,试试下面这些步骤:
1. 精准配置phpunit.xml的环境变量
别再用0或1来设置SYMFONY_DEPRECATIONS_HELPER了,换用更具体的参数强制显示详情。打开你的phpunit.xml(或phpunit.xml.dist),修改<php>节点:
<phpunit> <!-- 保留你原有其他配置 --> <php> <!-- 强制显示当前模块代码产生的所有弃用详情 --> <env name="SYMFONY_DEPRECATIONS_HELPER" value="max[self]=0" /> <!-- 开启Drupal全量错误输出,辅助定位 --> <env name="DRUPAL_TEST_ERROR_LEVEL" value="E_ALL" /> </php> <!-- 确保Symfony监听器正确配置 --> <listeners> <listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener"> </listener> </listeners> </phpunit>
max[self]=0的作用是:不对自定义模块的弃用做数量限制,直接把每一条弃用的调用栈都打印出来。
2. 用--debug替代--verbose运行测试
--verbose只会输出测试进度和简单结果,--debug才会输出完整的执行细节,包括弃用的具体代码位置:
./vendor/bin/phpunit --debug modules/custom/your_module/tests/
运行后你会看到每一条弃用都带着完整的调用链,直接定位到触发弃用的那一行代码。
3. 排查第三方依赖的弃用
如果自定义模块的测试里用到了Drupal核心或其他 contrib 模块的代码,弃用可能来自这些依赖。你可以单独运行某一个测试方法来缩小范围:
./vendor/bin/phpunit --debug --filter testYourSpecificTestMethod modules/custom/your_module/tests/
比如只跑你写的testCreateEntity方法,看弃用是否在这个方法执行时出现,这样就能快速锁定是自定义代码还是依赖的问题。
4. 清理测试环境缓存
Drupal测试环境的缓存经常会“吃掉”错误信息,先清理缓存再重新运行测试:
./vendor/bin/drush cache:rebuild --uri=http://default
如果是用测试数据库的话,也可以直接删除缓存表,确保测试环境是干净的状态。
5. 临时在测试类里开启错误输出
如果上面的方法还是没效果,可以在测试类的setUp()方法里临时加一行错误输出配置:
protected function setUp(): void { parent::setUp(); // 临时强制显示所有错误 error_reporting(E_ALL); ini_set('display_errors', 1); }
测试完成后记得把这段代码删掉,避免影响其他测试的输出格式。
内容的提问来源于stack exchange,提问作者Gogowitsch
相关产品推荐
相关产品推荐

