我正在尝试创建一个扩展“ DuskTestCase”的页面,以避免必须在每个测试中编写登录逻辑。但是,当我运行测试时,它无法断言登录后浏览器位于主页上。这是我尝试过的事情之一。请注意,Auth :: check()返回false,问题肯定出在这里,我无法弄清楚为什么它不按照文档中的说明对用户进行身份验证:https://laravel.com/docs/5.6/dusk ICOUser模型还正在实现Illuminate \ Contracts \ Auth \ Authenticatable合同。
LoginPage.php
namespace Tests\Browser\Pages;
use ARM\Tcollect\ICO\ICOUser;
use Laravel\Dusk\Browser;
use Illuminate\Support\Facades\Auth;
class LoginPage extends Page
{
const SUDOER_ID = 499;
/**
* Get the URL for the page.
*
* @return string
*/
public function url()
{
return '/';
}
/**
* Abstract the Login functionality
*
* @param \Laravel\Dusk\Browser $browser
* @param string $name
* @return void
*/
public function loginSudoer(Browser $browser)
{
$browser->loginAs(ICOUser::find(static::SUDOER_ID))- >visit('/home');
}
}
我的 LoginTest.php 上失败的方法如下:
public function testLoginSudoer()
{
$this->browse(function (Browser $browser){
$browser->on(new LoginPage)
->loginSudoer()
->waitForLocation('/home', 10)
->assertPathIs('/home')
->visit('/logout');
});
}
编辑:我也尝试过不使用Auth :: check()返回true的情况,但也不会通过。
public function testLoginSudoer()
{
Auth::loginUsingId(499);
$this->browse(function (Browser $browser){
$browser->visit('/home')
->waitForLocation('/home', 20)
->assertPathIs('/home')
->visit('/logout');
});
}
此外,当使用真实的Google Chrome浏览器手动导航到/_dusk/login/499
,然后再导航到/home
时,它可以工作。如果我在黄昏时做同样的事情,它不会转到/ home。