我正在将旧的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对此并没有多大用处,而且错误信息也不是很明显。它似乎与命名空间有关,因为类PHPUnit\Framework\Constraint\Constraint
似乎不存在,但我不确定如何解决该问题。我已根据需要将PHPUnit的版本升级到5.7,但这并不能解决问题。任何人都可以建议问题是什么?
答案 0 :(得分:4)
我今天也碰到了这个。
我升级了#34; phpunit / phpunit&#34;而不是将laravel / browser-kit-testing从~2.0降级到~1.0。从5.7到~6.0并解决了这个问题。
我同意它与PHPUnit名称空间有关。从5月25日开始提交laravel / browser-kit-testing,标题为&#34;使用PHPUnit 6.0命名空间类。&#34;
答案 1 :(得分:2)
将laravel / browser-kit-testing降级为1.0似乎解决了这个问题,因此我猜测它与PHPUnit的命名空间有关。
答案 2 :(得分:0)
我认为您需要指示您的测试运行器使用包含PHPUnit类别名的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