使用带有数据库的 PHPUnit Laravel 5 控制器进行测试(模拟?)
Test with PHPUnit Laravel 5 controller with database (Mock?)
我想对我的一个控制器进行单元测试,我想知道如何在不影响数据库的情况下进行测试。这是我的文件:
路线:
Route::resource('tasks', 'TasksListController');
在我的 TasksListController 中:
public function store()
{
if (empty(Input::get('name')) || !isset(Input::get('name'))) {
return false;
}
if (Task::create(Input::all())) {
return true;
}
return false;
}
我的表格:
<form action="/tasks" name="task" method="post">
<input type="text" name="name" />
<input type="submit" name="submit" value="Submit" />
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
</form>
我的单元测试:
class TasksTest extends TestCase {
public function testAddTask()
{
// How can I test the task creation ?
}
}
如果你正在测试你的控制器,你可以模拟任务 class:
Task::shouldReceive('create')->with([])->once()->andReturn('mocked-task');
通常,控制器 return 是一个视图或重定向对象,但在这种情况下,您的 return 是一个布尔值,只需执行断言:
$response = $this->call('post', 'tasks');
$this->assertTrue($response->getContent());
我想对我的一个控制器进行单元测试,我想知道如何在不影响数据库的情况下进行测试。这是我的文件:
路线:
Route::resource('tasks', 'TasksListController');
在我的 TasksListController 中:
public function store()
{
if (empty(Input::get('name')) || !isset(Input::get('name'))) {
return false;
}
if (Task::create(Input::all())) {
return true;
}
return false;
}
我的表格:
<form action="/tasks" name="task" method="post">
<input type="text" name="name" />
<input type="submit" name="submit" value="Submit" />
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
</form>
我的单元测试:
class TasksTest extends TestCase {
public function testAddTask()
{
// How can I test the task creation ?
}
}
如果你正在测试你的控制器,你可以模拟任务 class:
Task::shouldReceive('create')->with([])->once()->andReturn('mocked-task');
通常,控制器 return 是一个视图或重定向对象,但在这种情况下,您的 return 是一个布尔值,只需执行断言:
$response = $this->call('post', 'tasks');
$this->assertTrue($response->getContent());