2016-09-20 11 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(); 
} 

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

私はそれを動作させることができる唯一の方法は、応答pにエラーメッセージ「を参照してください。」しようとすることです:必須フィールドせずに要求を送信すると、しかし、PHPUnitが次のメッセージを返し記入しましたこれは、2つの理由で私のために動作しません

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

::のようなテストを行うことによって、年齢1)試験は、「プレス」を視野に依存ボタンや要求を送信(私はこれをテストしたいです別のテストとこれをコントローラのために厳密に保つ)、そして2)テストは、明らかに悪い習慣である 'Whoops'ストリングに依存する。

私は最初のテストコードがうまくいくはずだと主張するいくつかの答えを見つけましたが、単純にはそうではありません。

答えて

0

あなたの問題は、あなたがテストしていると思われるものをテストしていないことです。

コントローラのstore()を実行するには、あなたのルートが本当に変わっていない限り、GETではなくPOSTメソッドを使用する必要があります。

+1

を送信リソースメソッドは次のようになります。 Route :: resource( 'usuario'、 'Usuarios \ UsuariosController'); – Dany

1

ああ、私は今、しかし私はPOSTへの要求の呼び出しを変更しても同じ結果を得るましたが、私のルートはLaravelのでセットアップされていることがわかりセッション開始でそれを試してみて、空のパラメータ

 $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