为什么Laravel中的单元测试不能访问我的控制器操作

时间:2014-01-09 16:41:51

标签: laravel laravel-4

我已经设置了这样的路线:

Route::controller('clients', 'Controllers\ClientsController');

通过这种方法,我可以通过post和get轻松访问所有控制器功能。但是我不能轻易地测试它们。

public function testCantDeleteOtherAccountsClient()
{

    Route::enableFilters();

    $user = Models\User::find(1);

    $this->be($user);

    $response = $this->action('GET', 'ClientsController@getDelete');

    $this->assertRedirectedToAction('ClientsController@getIndex');

}

此测试会生成消息

  

InvalidArgumentException:路由[ClientsController @ getDelete]未定义。

该方法可通过url访问。我错过了什么?

2 个答案:

答案 0 :(得分:2)

我自己尝试了这个(通过控制器指定的路由),问题是使用action需要命名路由。就我所知,控制器路由目前不支持这一点。

如果您创建测试路线:

Route::get('test', array(
    'as' => 'testName', 
    'uses' => 'ClientsController@getDelete'
));

然后尝试

$this->action('GET', 'testName');

测试应该通过,您可以通过php artisan routes查看名称的所有路线。

您可能希望改用$this->client->request()。您可以检查是否发生了重定向:

$this->assertRedirectedTo("some\url");

请注意,$this->call()只是$this->client->request()的别名。

答案 1 :(得分:0)

我发现将其更改为使用调用而不是为我工作的操作:

$response = $this->call('GET', 'clients/delete/1');