You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 22:37:34