使用带有数据库的PHPUnit Laravel 5控制器进行测试(模拟?)

时间:2015-03-05 21:12:34

标签: unit-testing laravel mocking phpunit laravel-5

我想对我的一个控制器进行单元测试,我想知道如何在不影响数据库的情况下执行此操作。这是我的文件:

路线:

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 ?
    }
}

1 个答案:

答案 0 :(得分:2)

如果您正在测试控制器,则可以模拟Task类:

Task::shouldReceive('create')->with([])->once()->andReturn('mocked-task');

通常情况下,控制器会返回一个视图或重定向对象,但在这种情况下,返回的是一个布尔值,只需执行断言:

$response = $this->call('post', 'tasks');
$this->assertTrue($response->getContent());