Laravel 使用 phpunit + multiprocess 测试登录凭证

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]。

那么如何正确操作呢?

提前致谢

Pet*_*tin 5

我也有点坚持 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)

希望这可以帮助!