如何在PHPUnit 9中忽略特定测试的弃用警告?(Laravel Dusk场景)
在Laravel Dusk测试中抑制PHPUnit 9的
assertRegExp弃用警告 当你在PHPUnit 9里使用assertRegExp()时收到弃用警告是完全正常的——这个方法确实会在PHPUnit 10中被移除,官方也明确推荐改用assertMatchesRegularExpression()。不过如果你只想在特定测试里临时抑制这个警告(而不是全局修改或立刻替换所有用法),这里有几个实用的方案:
方法1:临时调整错误报告级别
这是最直接的方式,在目标测试方法里暂时禁用E_USER_DEPRECATED类型的错误,测试结束后再恢复原有配置:
public function testTargetPageWithRegExpValidation() { // 保存当前的错误报告级别 $originalErrorLevel = error_reporting(); // 移除弃用警告的报错类型 error_reporting($originalErrorLevel & ~E_USER_DEPRECATED); // 你的Dusk测试逻辑,包含assertPathIs和assertRegExp $this->browse(function (Browser $browser) { $browser->visit('/your-target-page') ->assertPathIs('/your-target-page') ->assertRegExp('/your-expected-regex-pattern/', $browser->text('.target-element')); }); // 恢复原来的错误报告配置 error_reporting($originalErrorLevel); }
方法2:使用PHPUnit的抑制注解
如果你的PHPUnit版本支持注解规则,可以直接在测试方法上方添加注解,告诉PHPUnit忽略该方法内的弃用断言警告:
/** * @SuppressWarnings(PHPUnit.RemovedAssertions) */ public function testTargetPageWithRegExpValidation() { $this->browse(function (Browser $browser) { $browser->visit('/your-target-page') ->assertPathIs('/your-target-page') ->assertRegExp('/your-expected-regex-pattern/', $browser->text('.target-element')); }); }
注意:这个注解的有效性可能取决于你的PHPUnit版本和项目代码分析工具的配置,但在大多数标准环境下都能生效。
方法3:封装复用的辅助方法(多测试场景适用)
如果你有多个测试需要抑制这个警告,可以在Dusk的测试基类(通常是tests/DuskTestCase.php)里封装一个通用方法,避免重复代码:
protected function suppressRegExpDeprecation(callable $testCallback) { $originalErrorLevel = error_reporting(); error_reporting($originalErrorLevel & ~E_USER_DEPRECATED); try { // 执行传入的测试逻辑 $testCallback(); } finally { // 无论测试成功失败,都恢复错误报告级别 error_reporting($originalErrorLevel); } }
之后在测试里就能这样复用:
public function testTargetPageWithRegExpValidation() { $this->suppressRegExpDeprecation(function () { $this->browse(function (Browser $browser) { $browser->visit('/your-target-page') ->assertPathIs('/your-target-page') ->assertRegExp('/your-expected-regex-pattern/', $browser->text('.target-element')); }); }); }
最后小提醒:这些都是临时解决方案,长远来看还是建议逐步把assertRegExp()替换为assertMatchesRegularExpression(),这样在升级到PHPUnit 10时就不会遇到兼容性问题了。
内容的提问来源于stack exchange,提问作者besrabasant
相关产品推荐
相关产品推荐

