laravel - 在 Laravel 中测试多授权

标签 laravel testing

在我的应用程序中,我使用多重身份验证。 (我用了 this link )

它有效,我可以作为用户登录 -> 我被重定向到“/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);
    }

}

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

我的测试有什么问题?

最佳答案

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

我使用相同的 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');
    }

在这里,我们在构造函数中指定了我们需要针对 admin 守卫进行身份验证,但在 HomeController 中我们没有。

HomeController.php 之前:

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

HomeController.php 之后:

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

解决方案是

$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.

关于laravel - 在 Laravel 中测试多授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48768998/

相关文章:

使用 Mocha 插件测试无服务器

javascript - sinon.stub().returns 为每次调用而不是一次指定

c# - Winforms 测试应用指南

php - 我怎样才能通过 Laravel 关系进行两次连接?

php - Laravel:Eloquent Search 无法正常工作

email - Laravel 全局发送地址进行测试

javascript - 获取对表的 td 输入的 Ajax 响应

php - Laravel 密码重置路线未找到

iphone - Cocos2d 有哪些好的测试工具?

ruby - 如何让 ruby​​ 支持本地主机文件?