项目混用Pest与PHPUnit测试类,如何绕过Pest直接运行PHPUnit?
同时运行Pest与PHPUnit测试的可行方案
分享几个实测有效的解决办法:
拆分测试目录+独立配置文件
把Pest编写的测试和原生PHPUnit测试分别放在两个独立目录,比如tests/PestTests和tests/PHPUnitTests。然后复制一份默认的phpunit.xml.dist,命名为phpunit-legacy.xml,在这份新配置里做两处修改:- 将
testsuite的目录指向tests/PHPUnitTests - 注释掉Pest的引导行(通常是
<bootstrap vendor/pestphp/pest/bootstrap.php"/>),替换为默认自动加载配置<bootstrap vendor/autoload.php"/>
之后执行php vendor/bin/phpunit -c phpunit-legacy.xml即可运行原生PHPUnit测试,Pest测试仍用php vendor/bin/pest执行。
- 将
临时切换PHPUnit的引导文件
若不想拆分目录,直接修改项目根目录的phpunit.xml:注释掉Pest的引导配置,改用vendor/autoload.php作为引导文件。此时php vendor/bin/phpunit就能正常运行所有原生PHPUnit测试类;需要跑Pest测试时,再改回原引导配置,或者直接用php vendor/bin/pest(Pest会自动兼容处理自身测试和常规PHPUnit测试)。针对特殊注解测试的单独处理
像你提到的@runTestsInSeparateProcesses这类Pest不支持的注解测试,可以单独放在一个子目录中,用上述独立配置文件指定仅运行该目录下的测试,避免频繁修改全局配置。
补充:Pest本身能兼容大部分PHPUnit测试,但涉及进程隔离注解、PHPUnit高级扩展功能这类场景时,必须用原生PHPUnit执行,以上方法均可绕过Pest的命令拦截,实现二者并行运行。
内容的提问来源于stack exchange,提问作者Zakalwe
相关产品推荐
相关产品推荐

