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'));
}

通常我会简单地删除这个问题,因为它被证明是初学者的错误。但作为一个"主演"这个问题的人,我宁愿回答它。
我不能确切地说出问题来自哪里,但我清除了我能清除的所有内容(缓存(,现在测试变为绿色。

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

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

长期的解决方案可能是放弃Dusk,直接使用WebDriver,因为Dusk的零配置特性让开发人员在出现问题时非常困惑,而像Laravel Dusk这样的古怪产品尤其糟糕。

相关内容

  • 没有找到相关文章

最新更新