我正在从Laravel 5.3更新到5.4
我的作曲家更新工作正常,似乎我的应用程序还可以。
但是当我使用PHPUnit运行测试时,所有测试都失败了。
编辑:
现在,基于patricus响应,我安装了浏览器工具包测试并完成了文档中所需的一切。
问题仍在发生......
以下是新的堆栈:
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
{
....
}
在我的tests文件夹中,我将旧的TestCase.php复制到BrowserKitTest.php
use Laravel\BrowserKitTesting\TestCase as BaseTestCase;
abstract class BrowserKitTest extends BaseTestCase
{
....
}
答案 0 :(得分:1)
Laravel 5.4更新了它使用的测试框架。 Laravel 5.4使用Laravel Dusk,而Laravel 5.3使用Symfony的browserkit组件。
Laravel 5.3 browserkit测试功能被提取到自己的包(laravel/browser-kit-testing),因此您可以要求包并让您的5.3测试在5.4中运行。 Laravel文档中的upgrade instructions解释了更多。
基本上,请引入laravel/browser-kit-testing
包,并将TestCase
文件更改为扩展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内核是由Laravel提供的原始TestCase
文件指定的内核。