如何使用 Laravel Dusk 测试身份验证?
How to test authentication using Laravel Dusk?
我正在使用 Laravel Dusk 设置 e2e 测试,我在尝试找出如何测试 Laravel 的身份验证时遇到了问题。
我正在使用 DatabaseMigrations
特征迁移数据库并用 1 条记录填充它(运行 模拟用户的 setUp 方法)。我尝试使用 loginAs()
方法登录该特定用户,但它没有让我登录。
我的AuthenticationTest.php
文件
use DatabaseMigrations;
public function setUp(): void
{
parent::setUp();
factory('App\User')->create();
}
public function an_authenticated_user_will_see_an_account_button()
{
$this->browse(function (Browser $browser) {
$browser
->loginAs(User::find(1))
->visit('http://recipemanager.test/recipes')
->assertSee('Account');
});
}
我的dusk routes
| | GET|HEAD | _dusk/login/{userId}/{guard?} | | Laravel\Dusk\Http\Controllers\UserController@login | web |
| | GET|HEAD | _dusk/logout/{guard?} | | Laravel\Dusk\Http\Controllers\UserController@logout | web |
| | GET|HEAD | _dusk/user/{guard?} | | Laravel\Dusk\Http\Controllers\UserController@user | web |
请注意,我没有接触任何控制器,与 Laravel Dusk!
相关的文件
我没有为我的测试使用测试数据库,我知道这很糟糕,我正在使用它,请不要讨厌我。
重现错误的步骤(您需要 XAMPP):
1. Clone the repo
2.切换到分支account
2. 配置 .env file
以匹配您的数据库
3. 确保配置 vhosts
Apache 文件和 etc/hosts
文件,以便您可以访问 recipemanager.test
作为主路由 ( 127.0.0.1 recipemanager.test
)
4.运行php artisan dusk
错误:
1)Tests\Browser\AuthenticationTest::an_authenticated_user_will_see_an_account_button
Did not see expected text [Account] within element [body].
Failed asserting that false is true.
我通过访问食谱 visit('/recipes')
解决了这个问题。问题出在环境文件中 -> APP_URL 被设置为 localhost,而 Dusk 试图访问 localhost:800/recipes。我通过断言完整 URL
来检查
$this->browse(function (Browser $browser) {
$browser
->loginAs(User::find(1))
->visit('/recipes')
->assertUrlIs('http://recipemanager.test/recipes');
});
Error: Actual URL [http://localhost/recipes] does not equal expected URL [http://recipemanager.test/recipes].
.env
文件
APP_URL=http://localhost
在我将 APP_URL 更改为 http://recipemanager.test
并访问 /recipes
之后一切正常!
我正在使用 Laravel Dusk 设置 e2e 测试,我在尝试找出如何测试 Laravel 的身份验证时遇到了问题。
我正在使用 DatabaseMigrations
特征迁移数据库并用 1 条记录填充它(运行 模拟用户的 setUp 方法)。我尝试使用 loginAs()
方法登录该特定用户,但它没有让我登录。
我的AuthenticationTest.php
文件
use DatabaseMigrations;
public function setUp(): void
{
parent::setUp();
factory('App\User')->create();
}
public function an_authenticated_user_will_see_an_account_button()
{
$this->browse(function (Browser $browser) {
$browser
->loginAs(User::find(1))
->visit('http://recipemanager.test/recipes')
->assertSee('Account');
});
}
我的dusk routes
| | GET|HEAD | _dusk/login/{userId}/{guard?} | | Laravel\Dusk\Http\Controllers\UserController@login | web |
| | GET|HEAD | _dusk/logout/{guard?} | | Laravel\Dusk\Http\Controllers\UserController@logout | web |
| | GET|HEAD | _dusk/user/{guard?} | | Laravel\Dusk\Http\Controllers\UserController@user | web |
请注意,我没有接触任何控制器,与 Laravel Dusk!
相关的文件我没有为我的测试使用测试数据库,我知道这很糟糕,我正在使用它,请不要讨厌我。
重现错误的步骤(您需要 XAMPP):
1. Clone the repo
2.切换到分支account
2. 配置 .env file
以匹配您的数据库
3. 确保配置 vhosts
Apache 文件和 etc/hosts
文件,以便您可以访问 recipemanager.test
作为主路由 ( 127.0.0.1 recipemanager.test
)
4.运行php artisan dusk
错误:
1)Tests\Browser\AuthenticationTest::an_authenticated_user_will_see_an_account_button
Did not see expected text [Account] within element [body].
Failed asserting that false is true.
我通过访问食谱 visit('/recipes')
解决了这个问题。问题出在环境文件中 -> APP_URL 被设置为 localhost,而 Dusk 试图访问 localhost:800/recipes。我通过断言完整 URL
$this->browse(function (Browser $browser) {
$browser
->loginAs(User::find(1))
->visit('/recipes')
->assertUrlIs('http://recipemanager.test/recipes');
});
Error: Actual URL [http://localhost/recipes] does not equal expected URL [http://recipemanager.test/recipes].
.env
文件
APP_URL=http://localhost
在我将 APP_URL 更改为 http://recipemanager.test
并访问 /recipes
之后一切正常!