在Laravel中测试多重身份验证

pop*_*_up 2 testing laravel

在我的应用程序中,我使用了多重身份验证。(我使用了此链接

它有效,并且我可以以用户身份登录->我被重定向到“ / home”

以管理员身份,登录时,我被重定向到“ / admin_home”

连接后,管理员无法访问“ / home”,他被重定向到另一个页面

但是当我编写此测试时:

class AdminTest extends TestCase
{
    public function setUp()
    {
        parent::setUp();
        Artisan::call('migrate');
        Artisan::call('db:seed');
    }

    public function tearDown()
    {
        Artisan::call('migrate:reset');
        parent::tearDown();
    }


    public function testCannotAccessUserSpace()
    {
        $admin = Admin::find(1);

        $response = $this->actingAs($admin, 'admin')
            ->get('/home');

        $response->assertStatus(200);
    }

}
Run Code Online (Sandbox Code Playgroud)

我有一个成功的响应,但我知道管理员无法访问“家庭”空间

我的考试有什么问题?

Tah*_*aza 5

好的,经过一些努力,我终于找到了问题。

我使用相同的link实现了多身份验证。

问题出在你HomeController.php不在AdminTest

就像您在AdminController.php构造函数中指定了身份验证保护一样,您也必须这样做HomeController.php

如您所知(假定您已单击链接),对于AdminController.php,它是这样的:

class AdminController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth:admin');
    }
Run Code Online (Sandbox Code Playgroud)

在这里,我们在构造函数中指定了我们需要针对admin防护进行身份验证,但在HomeController中则不需要。

HomeController.php之前:

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }
Run Code Online (Sandbox Code Playgroud)

之后的HomeController.php:

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth:web');
    }
Run Code Online (Sandbox Code Playgroud)

解决方法是

$ this-> middleware('auth');

更改为

$ this-> middleware('auth:web');

现在,如果您运行测试,它将显示以下错误:

PHPUnit 5.7.27 by Sebastian Bergmann and contributors.

F..                                                                 3 / 3 (100%)

Time: 124 ms, Memory: 10.00MB

There was 1 failure:

1) Tests\Feature\AdminTest::testCannotAccessUserSpace
Expected status code 200 but received 302.
Failed asserting that false is true.
Run Code Online (Sandbox Code Playgroud)