我正在使用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 |
重现该错误的步骤(您需要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.
答案 0 :(得分:0)
我通过访问食谱<View>
解决了该问题。问题出在环境文件中-> APP_URL设置为localhost,而Dusk试图访问localhost:800 / recipes。我通过断言完整的URL来检查
visit('/recipes')
$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更改为APP_URL=http://localhost
并访问http://recipemanager.test
之后,一切正常!