我正在将一个旧的 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
谷歌对此并没有太多用处,错误消息也不是很清楚。这似乎与命名空间有关,因为该类PHPUnit\Framework\Constraint\Constraint
似乎不存在,但我不确定如何解决该问题。我已根据需要将 PHPUnit 的版本升级到 5.7,但这并不能解决问题。谁能提出问题可能是什么?
编辑:只是想尝试将版本降级到 1.0,这似乎解决了现在的问题,所以也许 2.0 版旨在与 PHPUnit 6 一起使用?不过,希望这篇文章将来能帮助别人。