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

标签 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);

但是我不能伪造 session ,因为当我登录时,我实际上是在请求另一台服务器的访问 token 以进行身份​​验证。如果没有此 token ,我将无法显示任何页面,因为数据服务器将拒绝连接。

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

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

是否有更好的方法在所有测试期间保留此 token ?

最佳答案

这是我所做的:

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');
}

关于php - Laravel:使用身份验证进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31715741/

相关文章:

mysql - 识别比特币交易MySQL查询问题

c# - 测试错误: The 'async' operator lacks await operator

php - http错误无法打开到服务器nusoap错误13的套接字连接

javascript - Angularjs:修改CRUD操作的顺序

javascript - 根据下拉选择检索数据

PHPUnit - 使用 $this 或 self 作为静态方法?

unit-testing - 当我删除 fmt.Println() 时,golang 中的猴子修补失败

PHP算法从单个集合中生成特定大小的所有组合

php - 为 SQL 请求附加 PHP 字符串

javascript - 如何将数据 JSON 字符串从 PHP 传递到外部 javascript