测试用户是否登录 laravel 5.7

Lui*_*uis 3 php phpunit laravel

我正在做一个测试,但是当它尝试检查用户是否登录时失败了:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Auth;
use App\User;

class RegisterTest extends TestCase
{

    use RefreshDatabase;

    /*.....
    more test about registering
     ....*/    

    /** @test */
    function redirect_to_home_page_and_logged_in_after_login()
    {                   

        $user = factory(User::class)->create([
            'name' => 'Test',
            'email' => 'test@hotmail.com', 
            'password' => '123456'
        ]);     

        $response = $this->post('login', [
            'email' => 'test@hotmail.com',
            'password' => '123456'          
        ]);

        //this works
        $response->assertRedirect('/');

        //this fails 
        $this->assertTrue(Auth::check());


    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的控制器 HomeController:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class HomeController extends Controller
{


    public function index()
    {                    

        if (Auth::check()){

            return view('home');    
        }

        return view('welcome');

    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的路线/web.php

Route::get('/', 'HomeController@index');    
Auth::routes();
Run Code Online (Sandbox Code Playgroud)

我不确定我做错了什么。我能做什么?。我正在使用 laravel 5.7 和 phpunit 5.7.1 同样在我的 app/Htpp/Auth/LoginController.php 我这样做了:

protected $redirectTo = '/'; 
Run Code Online (Sandbox Code Playgroud)

谢谢你。

Mik*_*son 7

除了散列您的密码之外,您还可以发布到注册路径并创建一个新帐户。

/** @test */
function redirect_to_home_page_and_logged_in_after_register()
{                      
    $response = $this->post('register', [
        'name' => 'Test',
        'email' => 'test@hotmail.com',
        'password' => '123456'          
    ]);

    //this works
    $response->assertRedirect('/');

    //this fails 
    $this->assertTrue(Auth::check());
}
Run Code Online (Sandbox Code Playgroud)

我想您可能还需要以两种方式执行此操作:

/** @test */
function redirect_to_home_page_and_logged_in_after_login()
{                

    $user = factory(User::class)->create([
        'name' => 'Test',
        'email' => 'test@hotmail.com', 
        // note you need to use the bcrypt function here to hash your password
        'password' => bcrypt('123456')
    ]);      

    $response = $this->post('login', [
        'name' => 'Test',
        'email' => 'test@hotmail.com',
        'password' => '123456'          
    ]);

    //this works
    $response->assertRedirect('/');

    //this fails 
    $this->assertTrue(Auth::check());
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*ann 2

创建用户需要您处理密码的哈希值。您可以简单地使用 php 的password_hash函数来完成此操作。并用于Auth::login($user);登录。

就像这样:

$user = User::create(['email' => 'r@o.b', 'password' => password_hash('123456', 1)]);
Auth::login($user); //You should be logged in :)
Run Code Online (Sandbox Code Playgroud)

  • 这不是作者所问的解决方案......正确的解决方案是由迈克·哈里森给出的...... (2认同)