我想对我的一个控制器进行单元测试,我想知道如何在不影响数据库的情况下执行此操作。这是我的文件:
路线:
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 ?
}
}
答案 0 :(得分:2)
如果您正在测试控制器,则可以模拟Task类:
Task::shouldReceive('create')->with([])->once()->andReturn('mocked-task');
通常情况下,控制器会返回一个视图或重定向对象,但在这种情况下,返回的是一个布尔值,只需执行断言:
$response = $this->call('post', 'tasks');
$this->assertTrue($response->getContent());