Laravel使用phpunit + multiprocess登录Credential

时间:2017-07-12 08:22:51

标签: phpunit laravel-5.4

我对单元测试很新,我想尝试测试我的登录页面 我对这个单位的目标是: - >如果它在数据库中匹配 - >重定向到路线' /' - >如果不是 - >重定向到路线' / 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]。

那么如何正确地做到这一点?

提前致谢

1 个答案:

答案 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');

希望这有帮助!