我对单元测试很新,我想尝试测试我的登录页面 我对这个单位的目标是: - >如果它在数据库中匹配 - >重定向到路线' /' - >如果不是 - >重定向到路线' / login'
<?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');
}
}
当我在TestLoginTrue上测试时,它成功返回到&#39; /&#39;但是当我尝试使用TestLoginFalse时...它会像TestLoginTrue一样返回,它应该保留在&#39; / login&#39;路线, 有什么想法吗?
另外,我想尝试检查一下,当我已经登录时,我无法访问登录页面,所以我最初的想法是: 公共函数testLoginTrue()
{
$credential = [
'email' => 'user@ad.com',
'password' => 'user'
];
$this->post('login',$credential)
->assertRedirect('/')
->get('/login')
->assertRedirect('/');
}
但......返回
1)Tests \ Feature \ userTest :: testLoginTrue BadMethodCallException: 重定向上不存在方法[get]。
那么如何正确地做到这一点?
提前致谢
答案 0 :(得分:2)
我也对Laravel 5.4测试遵循重定向案例感到困惑。
作为解决方法,您可以查看$response->assertSessionHasErrors()
。这样它应该有效:
public function testLoginFalse()
{
$credential = [
'email' => 'user@ad.com',
'password' => 'incorrectpass'
];
$response = $this->post('login',$credential);
$response->assertSessionHasErrors();
}
此外,在testLoginTrue()
您可以检查,该会话缺少错误:
$response = $this->post('login',$credential);
$response->assertSessionMissing('errors');
希望这有帮助!