Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 单元测试Laravel 5.1中的用户身份验证_Php_Unit Testing_Laravel 5.1 - Fatal编程技术网

Php 单元测试Laravel 5.1中的用户身份验证

Php 单元测试Laravel 5.1中的用户身份验证,php,unit-testing,laravel-5.1,Php,Unit Testing,Laravel 5.1,我对Laravel5.1中的单元测试有点困惑 我想测试从用户帐户更新设置。我正在使用phpunit进行测试 这是我的测试用例 /** @test */ public function it_updates_personal_details(){ $this->withoutMiddleware(); $this->visit('/account/settings') ->post('/account/settin

我对Laravel5.1中的单元测试有点困惑

我想测试从用户帐户更新设置。我正在使用
phpunit
进行测试

这是我的测试用例

/** @test */
    public function it_updates_personal_details(){

        $this->withoutMiddleware();
        $this->visit('/account/settings')
            ->post('/account/settings', ["firstname"=>"RingoUpdated", 'lastname'=>"RingyUpdated", "username"=>"ringo", "bio"=>"My Personal Information", "facebook"=>"myFbUsername", "twitter"=>"myTwUsername", ])
            ->seeJson([
                "signup"=>true
            ]);
    }

但是在我的控制器中,我使用
Auth::id()
获取当前登录用户的
id
。如何在
Laravel
5.1中模拟这一点?

最简单的方法是利用:

辅助方法。拉威尔5.3

<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

use App\User; // user model

class ExampleTest extends TestCase
{
    public function testApplication()
    {
        $user = User::find(1); // find specific user

        $this->actingAs($user)
             ->visit('/')
             ->see('Hello, '.$user->name);
    }
}

这太棒了,我们可以为所有测试用例转移到类TestCase,我们可以给出一个名称,如下所示:

public function loginWithFakeUser()
{
      $user = new User([
        'id' => 1,
        'name' => 'yish'
      ]);

      $this->be($user);
}

当我们需要验证用户时,我们可以调用loginWithFakeUser来假装用户。

运行测试时,我正在创建一个测试用户。有没有办法获取该用户的
id
?您可以这样做(虽然很难看,但也有可能):
Auth::shouldReceive('id')->andreurn(DB::table('users')->orderBy('id','desc')->first(['id')->id)-请记住,我还没有测试过这个,但是应该会得到最后创建的用户的ID。实际上。。。这可能行不通。它将在您添加的新用户之前获得最后一个用户。是否还有其他方法可以做到这一点?如果不知道您的体系结构或您正在调用的功能,很难说。您可以使用该方法,但在结果中添加1,并假装这是正确的(甚至更不理想)。这实际上取决于您实际创建用户的方式,等等。使用这一点,我在这一行获得了对null上的成员函数guard()的
调用:
$this->app['auth']->guard($driver)->setUser($user)。这是在拉威尔5.8
        $user = factory(App\User::class)->create();
        $this->actingAs($user)
         ->visit('/')
         ->see('Hello, '.$user->name);
public function loginWithFakeUser()
{
      $user = new User([
        'id' => 1,
        'name' => 'yish'
      ]);

      $this->be($user);
}