Gra*_*aya 6 phpunit laravel-5.4
我对单元测试很陌生,我想尝试测试我的登录页面,我的目标是:-> 如果它在数据库中匹配-> 重定向到路由“/”-> 如果不是-> 重定向到路由“ /登录'
<?php
namespace Tests\Feature;
use App\Domain\Core\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Session;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class userTest extends TestCase
{
use DatabaseMigrations;
/**
* A basic test example.
*
* @return void
*/
public function testLoginTrue()
{
$credential = [
'email' => 'user@ad.com',
'password' => 'user'
];
$this->post('login',$credential)->assertRedirect('/');
}
public function testLoginFalse()
{
$credential = [
'email' => 'user@ad.com',
'password' => 'usera'
];
$this->post('login',$credential)->assertRedirect('/login');
}
}
Run Code Online (Sandbox Code Playgroud)
当我在 TestLoginTrue 上测试时,它成功返回到 '/' 但是当我尝试 TestLoginFalse 时......它返回与 TestLoginTrue 一样的,它应该停留在 '/login' 路线上,知道吗?
另外我想尝试检查当我已经登录时是否无法访问登录页面,所以我最初的想法是: public function testLoginTrue()
{
$credential = [
'email' => 'user@ad.com',
'password' => 'user'
];
$this->post('login',$credential)
->assertRedirect('/')
->get('/login')
->assertRedirect('/');
}
Run Code Online (Sandbox Code Playgroud)
但是……它回来了
1) Tests\Feature\userTest::testLoginTrue BadMethodCallException:Redirect 上不存在方法 [get]。
那么如何正确操作呢?
提前致谢
我也有点坚持 Laravel 5.4 测试跟随重定向案例。
作为一种解决方法,您可以检查$response->assertSessionHasErrors(). 这样它应该工作:
public function testLoginFalse()
{
$credential = [
'email' => 'user@ad.com',
'password' => 'incorrectpass'
];
$response = $this->post('login',$credential);
$response->assertSessionHasErrors();
}
Run Code Online (Sandbox Code Playgroud)
此外,testLoginTrue()您可以检查该会话丢失的错误:
$response = $this->post('login',$credential);
$response->assertSessionMissing('errors');
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!