2016-09-20 4 views
4

Привет Я пытаюсь создать тест для контроллера laravel, не зависящего от представления. У меня есть следующий метод в моем классе контроллера:Ошибки проверки достоверности на Laravel 5.1

public function store(Request $request) 
{ 
    $this->validate($request,[ 
      'name'=>'required', 
      'login'=>'required', 
      'password'=>'required' 
     ]); 
    //TODO: Store to database 
    return redirect('usuario/nuevo'); 
} 

И я нашел следующий код, чтобы проверить, есть ли запрос какие-либо ошибки:

public function testStore() 
{ 
    $response=$this->call('GET','usuario.store'); 
    $this->assertSessionHasErrors(); 
} 

Как это испытание должно пройти, так как я отправив запрос без требуемого поля заполнены, однако PHPUnit возвращает следующее сообщение:

Session missing key: errors 
Failed asserting that false is true. 

единственный способ, которым я могу заставить его работать, чтобы попытаться «видеть» сообщение об ошибке на реакции р возраст, сделав тест, как:

public function testStore() 
{ 
    $this->visit('/usuario/nuevo') 
     ->press('Crear') 
     ->see('Whoops'); 
} 

Это не работает для меня по двум причинам: 1) Тест зависит от точки зрения на «нажмите» кнопку и отправить запрос (я хочу, чтобы проверить это в другой тест и строго придерживайтесь этого правила для контроллера) и 2) Тест зависит от строки «Упс», которая, по-видимому, является плохой практикой.

Я нашел несколько ответов, утверждая, что кулачный тестовый код должен работать, но это просто не так.

ответ

0

Ваша проблема в том, что вы не тестируете то, что, по вашему мнению, испытываете.

Чтобы выполнить управление магазином(), вы должны использовать метод POST, а не GET, если ваши маршруты действительно странные.

+1

О да, я вижу, что сейчас, однако я изменил вызов с запросом POST и до сих пор получить тот же результат, мои маршруты установка с Laravel-х resource method like: Route :: resource ('usuario', 'Usuarios \ UsuariosController'); – Dany

1

Попробуйте его с началом сеанса и отправить пустые параметры

 $this->startSession(); 
     $this->call('GET','usuario.store', array(
     'name' => '', 
     'login' => '', 
     'password' => '' 
    )); 
    $errors = session('errors'); 
    $this->assertSessionHasErrors(); 
    $this->assertEquals($errors->get('name')[0],""your custom error message);// only for checking exact message 
Смежные вопросы