Я пытаюсь создать страницу, которая расширяет «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.