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

eCo*_*Evo 2 php laravel laravel-4

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

例子:

$test = new Item;

var_dump($test->getItemStatus($itemid));
Run Code Online (Sandbox Code Playgroud)

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

对于 Laravel,仅仅执行这个简单的测试似乎要复杂得多……或者也许我让它过于复杂,并且有一个简单的方法可以做到这一点。

假设我想在 Laravel 4 应用程序中做同样的事情。我想测试使用 model 的getItemStatus名为的控制器中方法的输出。ItemsControllerItems

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

$items = App::make('ItemsController')->getItemStatus($itemid);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Ant*_*iro 5

在我看来,Laravel 要简单得多,也许这就是为什么你可能会想太多。

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

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

    $test = new Item;

    dd($test);

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

    var_dump($test);

});
Run Code Online (Sandbox Code Playgroud)

现在请执行以下操作:

http://yourserver.com/test
Run Code Online (Sandbox Code Playgroud)

它应该停止在

dd($test);
Run Code Online (Sandbox Code Playgroud)

Vardumping 并在那条线上死去。评论它,再试一次,等等。

所有这些也可以在控制器中工作:

Route::get('test/{var?}', 'TestController@index');
Run Code Online (Sandbox Code Playgroud)

同样的方式:

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

您的路线:

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

如果您遵循以下操作,也应该有效:

http://yourserver.com/items/get-item-status
Run Code Online (Sandbox Code Playgroud)

如果没有,请尝试遵循

http://yourserver.com/public/index.php/items/get-item-status
Run Code Online (Sandbox Code Playgroud)

要不就

http://yourserver.com/public/items/get-item-status
Run Code Online (Sandbox Code Playgroud)

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