Laravel Dusk以错误的用户身份登录

时间:2018-11-14 23:12:43

标签: laravel-5.5 laravel-dusk

我有一个相当简单的浏览器测试(laravel黄昏)。测试失败,不是因为实际的断言而是因为缺少权限。

我登录的用户(loginAs)具有这些权限。事实证明,最后,尽管我以 testUser 身份登录,但实际经过身份验证的用户是另一个用户。

似乎已通过身份验证的用户在loginAs()和访问控制器功能之间切换。但正如我所看到的,这两个步骤应该一个接一个地进行。

如果有不清楚的地方,我会尽力向您解释情况,请澄清。

测试

/**
* @throws \Throwable
*/
public function test_something()
{
   $this->browse(function (Browser $browser) {
   $browser->loginAs($this->testUser) //made a breakpoint here and it showed the correct user
      ->visit(new IndexPage())
      //some asserts
   });
}   

对应控制器

public function index()
{
    dd(Auth::user()->username); //shows not the name of testUser
    if (! Auth::user()->can('index'))
        return abort(403, "Operation not permitted"); //fails because of wrong user

    //gather data

    return view('index', compact('data'));
}

2 个答案:

答案 0 :(得分:0)

通常,我会简单地删除此问题,因为它原来是某种初学者的错误。但是当有人“出演”这个问题时,我宁愿回答。
我无法确切说明问题的出处,但我清除了所有可以清除的内容(缓存),现在测试变为绿色。

答案 1 :(得分:0)

我认为此问题与Dusk登录自身的方式有关。我注意到,尽管调用了$browser->loginAs($user),但尝试访问当前用户时,我的观察者总是会得到null。我的解决方案是也调用\Auth::login($user)来解决问题。

重要的是要记住,运行黄昏测试的PHP流程与应用程序代码是完全隔离的,这可能导致很多混乱。

长期的解决方案可能是放弃Dusk并直接使用WebDriver,因为Dusk的零配置特性使开发人员在出现问题时非常困惑,而对于Laravel Dusk这样的易碎品尤其如此。

相关问题