Laravel黄昏认证自定义用户模型

时间:2018-07-04 18:05:22

标签: php laravel testing phpunit laravel-dusk

我正在尝试创建一个扩展“ 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。

0 个答案:

没有答案