如何对Laravel控制器进行简单测试?

时间:2014-04-04 19:28:42

标签: php laravel laravel-4

在我工作的大多数网络应用程序中,我可以创建一个简单的测试脚本(test.php),加载所有依赖项(通常通过自动加载器),设置数据库连接,调用任何类方法,然后检查他们返回的结果确保一切正常。

示例:

$test = new Item;

var_dump($test->getItemStatus($itemid));

上面会显示它为该itemid返回的值的良好输出。

使用Laravel,执行这个简单的测试似乎要复杂得多......或者我可能过于复杂,并且有一种简单的方法可以做到这一点。

假设我想在Laravel 4应用程序中执行相同的操作。我想测试使用模型getItemStatus的名为ItemsController的控制器中方法Items的输出。

如果我尝试以下操作,则会收到Symfony \ Component \ Debug \ Exception \ FatalErrorException错误:

$items = App::make('ItemsController')->getItemStatus($itemid);

如果我在routes.php中定义这条路线:

Route::get('items/get-item-status', array('as' => 'getItemStatus', 'uses' => 'ItemsController@getItemStatus'));

然后尝试以下操作,我在请求输出中得到Symfony\Component\HttpKernel\Exception\NotFoundHttpException

$request = Request::create('items/get-item-status', 'GET', array());
$items = Route::dispatch($request)->getContent();

1 个答案:

答案 0 :(得分:1)

在我看来,Laravel要简单得多,也许这也就是为什么你可能会过度思考它。

让我们从一个非常基本的路由器开始。以下是使用基本路由器/控制器中的Laravel应用程序进行简单调试的一些选项:

Route::get('test', function() {

    $test = new Item;

    dd($test);

    Log::info($test); // will show in your log

    var_dump($test);

});

现在关注:

http://yourserver.com/test

它应该停在

dd($test);

在该线上进行Vardumping和死亡。评论它,再试一次,等等。

所有这些也可以在控制器中使用:

Route::get('test/{var?}', 'TestController@index');

同样的方式:

class TestController extends Controller {

    public function index($var = null)
    {
        $test = new Item;

        dd($var);
        dd($test);

        Log::info($var);
        Log::info($test);

        var_dump($test);
        var_dump($var);
    }

}

您的路线:

Route::get('items/get-item-status', array('as' => 'getItemStatus', 'uses' =>  'ItemsController@getItemStatus'));

如果您遵循:

,也应该有效
http://yourserver.com/items/get-item-status

如果没有,请尝试按照

http://yourserver.com/public/index.php/items/get-item-status

或者只是

http://yourserver.com/public/items/get-item-status

因为您可能有虚拟主机或.htaccess配置问题。