0

我正在做一个 Laravel 8 项目。我注意到 Laravel 8 中发生了一些变化,包括身份验证。我正在使用 Jetstream 和 Intertia JS 进行身份验证和管理面板。我现在在使用 Dusk 登录时无法编写浏览器测试。似乎登录在测试中不起作用,即使它实际上正在工作。

这是我的测试

function test userCanLogin()
{
   $this->browse(function (Browser $browser) {
            $admin = User::factory()->create();//I make sure that the password is Test.1234 and I can login on the browser.
  
            $browser->visit('/login')->type('email', $admin->email)
                ->type('password', 'Test.1234')
                ->press('Login')
                ->assertAuthenticatedAs($admin);
        });
}

当我运行测试时,我收到以下错误。

The currently authenticated user is not who was expected.
Failed asserting that two arrays are identical.
--- Expected
+++ Actual
@@ @@
-Array &0 (
-    'id' => 1
-    'className' => 'App\Models\User'
-)
+Array &0 ()

我的代码有什么问题,我该如何解决?

4

1 回答 1

0

我不是 100% 确定,但我认为默认情况下 Dusk 在执行断言之前会等待页面刷新。由于 Inertia 是通过 JS 加载的,因此您需要显式地pause()waitFor()某些指示页面已加载的元素。(请参阅 Dusk 文档等待

还有这个库可以向 Inertia.js 添加事件,您可以在 Dusk 中收听这些事件

于 2021-09-10T16:16:50.323 回答