使用带有数据库的 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());