升级到 5.4 后无法在 Laravel BrowserKit 包中找到 PHPUnit\Framework\Constraint\Constraint

Unable to find PHPUnit\Framework\Constraint\Constraint in Laravel BrowserKit package after upgrade to 5.4

我正在将旧的 Laravel 个人项目从 5.2 升级到 5.4。升级到 5.3 似乎没问题,但现在我要升级到 5.4,我 运行 遇到了问题。

该项目使用了旧的测试层,因此我安装了 BrowserKit 测试包以保持向后兼容性。我还为 Browserkit 测试创建了以下基本测试用例:

<?php

namespace Tests;

use Laravel\BrowserKitTesting\TestCase as BaseTestCase;

abstract class BrowserKitTestCase extends BaseTestCase
{
    use CreatesApplication;

    public $baseUrl = 'http://localhost';
}

使用普通测试用例的模型测试工作正常,但是当我 运行 使用 BrowserKit 测试用例的任何测试时,我看到以下错误消息:

PHP Fatal error:  Class 'PHPUnit\Framework\Constraint\Constraint' not found in /home/matthew/Projects/myproject/vendor/laravel/browser-kit-testing/src/Constraints/PageConstraint.php on line 10
PHP Fatal error:  Uncaught Illuminate\Contracts\Container\BindingResolutionException: Target [Illuminate\Contracts\Debug\ExceptionHandler] is not instantiable. in /home/matthew/Projects/myproject/vendor/laravel/framework/src/Illuminate/Container/Container.php:895
Stack trace:
#0 /home/matthew/Projects/myproject/vendor/laravel/framework/src/Illuminate/Container/Container.php(735): Illuminate\Container\Container->notInstantiable('Illuminate\Cont...')
#1 /home/matthew/Projects/myproject/vendor/laravel/framework/src/Illuminate/Container/Container.php(608): Illuminate\Container\Container->build('Illuminate\Cont...')
#2 /home/matthew/Projects/myproject/vendor/laravel/framework/src/Illuminate/Container/Container.php(575): Illuminate\Container\Container->resolve('Illuminate\Cont...')
#3 /home/matthew/Projects/myproject/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(728): Illuminate\Container\Container->make('Illuminate\Cont...')
#4 /home/matthew/Projects/myproject/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExce in /home/matthew/Projects/myproject/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 895

Google 对此没有多大用处,错误消息也不是很清楚。这似乎与名称空间有关,因为 class PHPUnit\Framework\Constraint\Constraint 似乎不存在,但我不确定如何解决该问题。我已根据需要将 PHPUnit 的版本升级到 5.7,但这并没有解决问题。任何人都可以提出可能是什么问题吗?

编辑:只是想尝试将版本降级到 1.0,这似乎暂时解决了问题,所以 2.0 版是否可以与 PHPUnit 6 一起使用?不过,希望这个 post 能在将来帮助别人。

将 laravel/browser-kit-testing 降级到 1.0 似乎可以解决问题,所以我猜这与 PHPUnit 的命名空间有关。

我运行今天也成这个。

我没有将 laravel/browser-kit-testing 从 ~2.0 降级到 ~1.0,而是将 "phpunit/phpunit" 从 5.7 升级到 ~6.0 并解决了问题。

我同意它与 PHPUnit 命名空间有关。从 5 月 25 日开始提交 laravel/browser-kit-testing,标题为 "Use PHPUnit 6.0 namespaced classes."

我认为您需要指示您的测试运行器使用包含 PHPUnit class 别名的 bootstrap 自动加载器文件。

尝试

phpunit --bootstrap bootstrap/autoload_test.php

如果您使用的是 phpunit.xml 配置文件,请确保您的 phpunit 标记在您的其他设置选项中包含 bootstrap="bootstrap/autoload_test.php",如下所示:

<phpunit bootstrap="bootstrap/autoload_test.php">

您可以指示您的测试运行器像这样读取您的 phpunit.xml:

phpunit --configuration phpunit.xml