【问题标题】:Test with PHPUnit Laravel 5 controller with database (Mock?)使用带有数据库的 PHPUnit Laravel 5 控制器进行测试(模拟?)
【发布时间】:2015-05-07 09:49:48
【问题描述】:

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

路线:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-02
      • 2017-08-16
      • 2020-05-07
      • 1970-01-01
      • 2016-01-14
      • 2011-06-02
      • 2015-10-14
      • 2010-10-21
      相关资源
      最近更新 更多