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)
谢谢你。
除了散列您的密码之外,您还可以发布到注册路径并创建一个新帐户。
/** @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)
创建用户需要您处理密码的哈希值。您可以简单地使用 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)