我对Laravel 5.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中嘲笑这个?
答案 0 :(得分:2)
最简单的方法是使用Mockery in the Facade:
public function it_updates_personal_details(){
Auth::shouldReceive('id')->andReturn(1);
$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
]);
}
答案 1 :(得分:0)
actingAs 辅助方法。 Laravel 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);
}
}
actAs辅助方法。提供了一种将给定用户作为当前用户进行身份验证的简单方法。
您也可以使用模型工厂来生成和验证用户:
$user = factory(App\User::class)->create();
$this->actingAs($user)
->visit('/')
->see('Hello, '.$user->name);
答案 2 :(得分:0)
这太棒了,我们可以移动到TestCase类的所有测试用例,我们可以给出一个名字,如下所示:
public function loginWithFakeUser()
{
$user = new User([
'id' => 1,
'name' => 'yish'
]);
$this->be($user);
}
当我们需要经过身份验证的用户时,我们可以调用loginWithFakeUser来假装用户。