0

我正在从 Laravel 5.3 更新到 5.4

我的作曲家更新工作正常,看来我的应用程序还可以。

但是当我使用 PHPUnit 运行测试时,所有测试都失败了。

编辑:

现在,根据 patricus 的响应,我安装了 browser-kit-testing 并制作了文档所需的一切。

问题还在发生...

以下是新的堆栈:

TypeError: Argument 1 passed to Illuminate\Auth\SessionGuard::setRequest() must be an instance of Symfony\Component\HttpFoundation\Request, null given, called in /laravel/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php on line 139

/laravel/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php:768
/laravel/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php:139
/laravel/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php:96
/laravel/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php:70
/laravel/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php:294
/laravel/vendor/sentry/sentry-laravel/src/Sentry/SentryLaravel/SentryLaravelServiceProvider.php:83
/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php:678
/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php:565
/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:702
/laravel/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:105
/laravel/vendor/sentry/sentry-laravel/src/Sentry/SentryLaravel/SentryLaravelServiceProvider.php:45
/laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:28
/laravel/vendor/laravel/framework/src/Illuminate/Support/helpers.php:912
/laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:86
/laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:30
/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php:524
/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:762
/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:745
/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:746
/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/BootProviders.php:17
/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:208
/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:160
/laravel/tests/BrowserKitTest.php:24
/laravel/vendor/laravel/browser-kit-testing/src/TestCase.php:95
/laravel/vendor/laravel/browser-kit-testing/src/TestCase.php:70
/laravel/tests/functional/RoundRobinTreeTest.php:22

这是我的 RoundRobinTest:

class RoundRobinTreeTest extends BrowserKitTest
{
....
} 

在我的测试文件夹中,我将旧的 TestCase.php 复制到 BrowserKitTest.php

    use Laravel\BrowserKitTesting\TestCase as BaseTestCase;


abstract class BrowserKitTest extends BaseTestCase
{
....
}
4

1 回答 1

1

Laravel 5.4 更新了它使用的测试框架。Laravel 5.4 使用 Laravel Dusk,而 Laravel 5.3 使用 Symfony 的 browserkit 组件。

Laravel 5.3 browserkit 测试功能被提取到它自己的包(laravel/browser-kit-testing)中,这样你就可以在 5.4 中需要这个包并让你的 5.3 测试工作。Laravel 文档中的升级说明解释更多。

基本上,拉入laravel/browser-kit-testing包,并将TestCase文件更改为 extend Laravel\BrowserKitTesting\TestCase,您的测试应该像在 5.3 中那样工作。


编辑

据我所知,您使用的是错误的Kernel.

在您的堆栈跟踪中,Illuminate/Auth/AuthManager.php:139是这一行:

$guard->setRequest($this->app->refresh('request', $guard, 'setRequest'));

这意味着$this->app->refresh('request', $guard, 'setRequest')返回 null (根据您的错误消息“null given”)。$this->app->refresh()当被刷新的项 ( 'request') 尚未绑定时,将返回 null。

在您的堆栈跟踪中较早显示您的tests/BrowserKitTest.php文件正在调用bootstrap(). Illuminate\Foundation\Http\Kernel问题在于 Http 内核的引导程序中没有任何东西可以绑定'request'实例。

您应该调用bootstrap()Illuminate\Foundation\Console\Kernel因为它的引导程序之一是,它确实为实例Illuminate\Foundation\Bootstrap\SetRequestForConsole提供了绑定。'request'

另外,Console 内核是TestCaseLaravel 提供的原始文件指定的内核。

于 2017-02-04T06:57:05.220 回答