我正在使用phpunit和嘲諷學習laravel中的單元測試。我目前正在測試UsersController :: store()。mockery-> shouldReceive()傳遞時它不應該?
我嘲笑用戶模型,並使用它來測試索引方法,似乎工作。當我拿出$ this-> user-> all()時,測試失敗,並且當它通過時。
雖然我正在使用模擬來測試用戶模型接收validate()一次,但測試存儲方法時。商店方法是空的,但測試通過。我已經離開了之類的無關緊要的部件着想brevities
<?php
class UsersController extends BaseController {
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
$users = $this->user->all();
return View::make('users.index')
->with('users', $users);
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
return View::make('users.create');
}
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
//
}
}
UserControllerTest.php
<?php
use Mockery as m;
class UserControllerTest extends TestCase {
public function __construct()
{
$this->mock = m::mock('BaseModel', 'User');
}
public function tearDown()
{
m::close();
}
public function testIndex()
{
$this->mock
->shouldReceive('all')
->once()
->andReturn('All Users');
$this->app->instance('User', $this->mock);
$this->call('GET', 'users');
$this->assertViewHas('users', 'All Users');
}
public function testCreate()
{
View::shouldReceive('make')->once();
$this->call('GET', 'users/create');
$this->assertResponseOk();
}
public function testStore()
{
$this->mock
->shouldReceive('validate')
->once()
->andReturn(m::mock(['passes' => 'true']));
$this->app->instance('User', $this->mock);
$this->call('POST', 'users');
}
}
謝謝你,我認爲這有伎倆。至少testStore現在失敗了。但是,我的測試擴展了擴展phpunits測試用例的測試用例。 testcase有setUp(){parent :: setUp(); $ this-> prepareForTests();}所以在每個單獨的測試類中使用setUp會覆蓋這是我的權利?有另一種方法嗎?我只是在每個測試函數中創建一個模擬對象,以使其工作。 – Ir1sh
你的類中的setUp方法也需要調用parent :: setUp()。這應該是要走的路。 –
現在全世界似乎都很好謝謝 – Ir1sh