为什么Laravel Dusk不提供验证用户身份的方法?

时间:2019-09-26 05:39:58

标签: laravel laravel-dusk

在每次测试开始时,无法通过将Laravel Dusk与Laravel Passport结合使用来对用户进行API身份验证。

我尝试过:
$this->actingAs(User::find(1), 'api');
$browser->loginAs(User::find(1));
Passport::actingAs($this->user);

我可以对用户进行身份验证的唯一方法是在每次测试开始时重复登录逻辑,但是我真的希望有一种更直接,更快捷的方法来实现此目的。

$browser->visit('/login')
         ->type('@email', 'example@email.com')
         ->type('@password', 'password')
         ->click('@login-button')
         ->waitForLocation('/')`

我希望在每次测试之前都有很多更清洁,更快捷的方法来对用户进行身份验证。

但是问题是,在那里吗?

至少通过阅读文档并进行谷歌搜索,看来好像没有,我希望我是错的。

1 个答案:

答案 0 :(得分:0)

您可以使用$browser->loginAs($user)登录,但是您必须先创建用户。

可能还需要做些什么,我也记得自己很长时间也一直在摆弄,是在运行测试代码(即$this->browse(...))之前提交数据库更改。这是因为执行了黄昏测试的方式。正常的单元测试都是在同一过程中执行的,该过程使用相同的连接并因此具有相同的状态。黄昏测试是使用多个过程执行的,一个就像单元测试,一个模仿浏览器。因此,需要提交对数据库的更改,这通常会在关闭连接时隐式发生(至少对于SQLite数据库而言)。

以下非常基本的测试应为您提供指导:

public function test_home_screen_is_accessible_by_authentication_user(): void
{
    /** @var User $user */
    $user = factory(User::class)->state('dusk')->create();
    DB::commit();

    $this->browse(function (Browser $browser) use ($user) {
        $browser->loginAs($user)
            ->visit(new HomePage);
    });
}