【问题标题】:Laravel 6 PHP unit testing - Session store not set on requestLaravel 6 PHP 单元测试 - 未按要求设置会话存储
【发布时间】:2021-11-29 09:15:52
【问题描述】:

运行单元测试时出现运行时错误(RuntimeException: Session store not set on request.)

public function testUserCanLoginCorrectCredentials()
{
    $this->withoutExceptionHandling();
    $user = factory(Users::class)->create();
    $response = $this->post('/admin/login', [
        'email' => $user->email,
        'password' => '123456789',
    ]);
    $response->withSession(['user_id' => $user->id]);
    $response->assertRedirect('/admin/dashboard');
    $this->assertAuthenticatedAs($user);
}

在控制器中:

$checkUserExist =$this->users->where('email',$request->email)->where('password',$request->password)->first();
if(isset($checkUserExist)){

    $user = Auth::guard('users');
    $users = Auth::login($checkUserExist);
    //Authentication passed...
    $request->session()->put('admin_user_id', $checkUserExist->id);
    return redirect('admin/dashboard')->with('success', 'You are Logged in !');
} else {
    return redirect('/admin')->with('error','Invalid Password, Please Entered Correct Credentials!');
}

运行命令时出现此错误

Time: 1.76 seconds, Memory: 52.00 MB

There was 1 error:

1) Tests\Unit\HostLoginTest::testUserCanLoginCorrectCredentials
RuntimeException: Session store not set on request.

C:\xampp\htdocs\parkk-web\vendor\laravel\framework\src\Illuminate\Http\Request.php:482
C:\xampp\htdocs\parkk-web\app\Http\Controllers\Auth\LoginController.php:107
C:\xampp\htdocs\parkk-web\vendor\laravel\framework\src\Illuminate\Routing\Controller.php:54
C:\xampp\htdocs\parkk-web\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php:45
C:\xampp\htdocs\parkk-web\vendor\laravel\framework\src\Illuminate\Routing\Route.php:219
C:\xampp\htdocs\parkk-web\vendor\laravel\framework\src\Illuminate\Routing\Route.php:176
C:\xampp\htdocs\parkk-web\vendor\laravel\framework\src\Illuminate\Routing\Router.php:680

【问题讨论】:

  • 这看起来更像是一个集成测试,而不是一个单元测试。
  • withSession 是在请求​​而不是响应上设置的,即将它放在 ->post 之前。

标签: php laravel


【解决方案1】:

请求中似乎没有找到您的会话。最可能的原因是未在您的内核中使用负责启动会话的 Illuminate\Session\Middleware\StartSession::class 中间件。

我还建议不要将用户密码直接存储在数据库中,而是应该在登录时对其进行散列和检查。

【讨论】:

    猜你喜欢
    • 2016-03-30
    • 2023-03-22
    • 2020-08-24
    • 2017-03-13
    • 2017-09-30
    • 2016-10-08
    • 2021-05-08
    • 2016-08-30
    • 2020-11-28
    相关资源
    最近更新 更多