我已经设置了这样的路线:
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访问。我错过了什么?
答案 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');