Laravel:使用身份验证进行单元测试

时间:2015-07-30 05:26:44

标签: php api unit-testing laravel phpunit

我试图在我的Laravel应用程序中进行一些测试。首先,我检查登录是否正常工作:

public function testLogin(){

    $this->visit('/auth/login')
     ->type('mylogin', 'login')
     ->type('mypassword', 'password')
     ->press('Login')
     ->seePageIs('/home');
}

好的,登录工作正常! 现在,我想检查页面/accountInfo中的所有信息是否正确:

public function testAccountInfoDisplay(){
    $this->visit('/accountInfo')
        ->see('criticaldata');
}

但是我从未看到/accountInfo页面,因为我已经重定向,因为我没有登录。

我在文档中看到了一些解决方案:

$this->actingAs($user)
             ->withSession(['foo' => 'bar'])
             ->visit('/')
             ->see('Hello, '.$user->name);

但是我无法伪造一个会话,因为当我登录时,我实际上要求访问令牌到另一台服务器进行身份验证。如果没有此令牌,我将无法显示任何页面,因为数据服务器将拒绝连接。

简而言之,我在testLogin函数中获得了此标记,但它在之后消失了。

我当然可以为每个测试进行登录,但如果我要运行150个测试,那就是很多请求。

在所有测试中是否有更好的方法来保留此令牌?

1 个答案:

答案 0 :(得分:1)

这是我做的:

public function testLogin(){

    $this->visit('/auth/login')
     ->type('myLogin', 'login')
     ->type('myPassowrd', 'password')
     ->press('Login')
     ->seePageIs('/home');

     return Session::all();
}
/**
* @depends testLogin
*/
public function testAccountInfoDisplay($session){

    foreach($session as $key=>$value){
        Session::set($key, $value);
    }


    $this->visit('/accountInfo')
    ->see('4631');
}