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

Posted

技术标签:

【中文标题】升级到 5.4 后在 Laravel BrowserKit 包中找不到 PHPUnit\\Framework\\Constraint\\Constraint【英文标题】:Unable to find PHPUnit\Framework\Constraint\Constraint in Laravel BrowserKit package after upgrade to 5.4升级到 5.4 后在 Laravel BrowserKit 包中找不到 PHPUnit\Framework\Constraint\Constraint 【发布时间】:2017-11-28 10:50:18 【问题描述】:

我正在将一个旧的 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,但这并不能解决问题。谁能提出问题可能是什么?

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

我更喜欢这个答案,因为 Laravel 5.4 的升级指南特别提到要使用版本 1。*【参考方案2】:

我今天也遇到了。

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

我同意它与 PHPUnit 命名空间有关。从 5 月 25 日起,有一个对 laravel/browser-kit-testing 的提交,标题为“使用 PHPUnit 6.0 命名空间类”。

【讨论】:

【参考方案3】:

我认为您需要指示您的测试运行程序使用包含 PHPUnit 类别名的引导自动加载程序文件。

试试

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

【讨论】:

以上是关于升级到 5.4 后在 Laravel BrowserKit 包中找不到 PHPUnit\Framework\Constraint\Constraint的主要内容,如果未能解决你的问题,请参考以下文章

将 Laravel 5.4 升级到最新版本 (5.7)

将 Laravel 从 5.3 升级到 5.4

如何将我的 laravel 5.0 项目直接升级到 5.4?

从 Laravel 5.3 升级到 Laravel 5.4 并且空字段转换为 NULL

升级到 laravel 5.4 后调用未定义的方法

从 5.4 升级后的 Laravel 419 发布请求