Php 单元测试Laravel 5.1中的用户身份验证
我对Laravel5.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
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);
}