2013-06-01 4 views
1

Я создаю приложение Laravel 4, и я столкнулся с небольшой хваткой. При написании тестов для моего контроллера я заметил по какой-то странной причине, что он никогда не может утверждать. Сохраняет мои (снятые) коды контроллера.Проблема с тестированием блока управления Laravel?

<?php use Controllers\Base\PublicController; 

class GuestController extends PublicController { 

    /** 
    * Display the report issue form. 
    * 
    * @return null 
    */ 
    public function getReportIssue() 
    { 
     $this->layout->title = Lang::get('app.report_issue'); 

     $this->layout->content = View::make('guest.report_issue'); 
    } 

    public function postReportIssue() 
    { 
     $rules = [ 
      'full_name' => 'required|min:2|max:100', 
      'email'  => 'required|email', 
      'issue'  => 'required|min:10|max:1000', 
     ]; 

     $validator = Validator::make(Input::all(), $rules); 

     if ($validator->fails()) 
     { 
      return Redirect::route('guest.report_issue') 
       ->withInput() 
       ->withErrors($validator->messages()); 
     } 

     return Redirect::route('guest.reported_issue') 
      ->with('msg', 'Okay'); 
    } 
} 

Теперь он проверяет ив создан для двух методов выше являются ...

public function testHandleFailReportIssue() 
{ 
    Input::replace([ 
     'full_name' => '', 
     'email'  => '', 
     'issue'  => '', 
    ]); 

    $this->call('POST', 'report-issue'); 

    $this->assertRedirectedToRoute('guest.report_issue'); 

    $this->assertSessionHasErrors(['full_name', 'email', 'issue']); 
} 

public function testHandlePassReportIssue() 
{ 
    Input::replace([ 
     'full_name' => 'John Doe', 
     'email'  => '[email protected]', 
     'issue'  => 'Lorem ipsum idom lola singel tudor reopmatica loesn dolor gotar. 
         Lorem ipsum idom lola singel tudor reopmatica loesn dolor gotar' 
    ]); 

    $this->call('POST', 'report-issue'); 

    $this->assertRedirectedToRoute('guest.reported_issue', [], ['msg']); 
} 

Первоначального испытания проходит успешно, но второй один выходит из строя. После небольшого расследования это показывает, что проверка не проходила, что означает, что метод Input::replace() не выполняет свою работу, потому что я ввел правильные значения запроса. Может быть, им что-то не хватает?

[EDIT]

Я решил сделать это

public function testHandlePassReportIssue() 
{ 
    Input::replace([ 
     'full_name' => 'John Doe', 
     'email'  => '[email protected]', 
     'issue'  => 'Lorem ipsum idom lola singel tudor reopmatica loesn dolor gotar. 
         Lorem ipsum idom lola singel tudor reopmatica loesn dolor gotar', 
    ]); 

    $response = $this->route('POST', 'guest.report_issue'); 

    dd($this->app['session']->get('errors')); 

    $this->assertRedirectedToRoute('guest.reported_issue', [], ['msg']); 
} 

на тест для отладки путем проверки на сессии и, как я подозревал, вход был не получать заселен, какие-либо причине это могло произойти ? Были возвращены сообщения проверки.

ответ

6
$response = $this->route('POST', 'guest.report_issue', array(
    'full_name' => 'Foo', 
    'email' => '[email protected]', 
    'issue' => 'FooBar')); 

Вы можете передавать параметры в виде массива.

+0

Спасибо, что проблема решена! – CreativityKills

Смежные вопросы