2017-12-20 14 views
0

私はミドルウェアテストコントローラミドルウェア

public function handle(Request $request, Closure $next) 
    { 
     /** 
     * test if user is logged in User 
     */ 
     if(!$this->auth->check()) 
     { 
     /** 
     * if user email register arbitrary User 
     */ 
     if(!$request->has('email')) 
     { 
      return back() 
       ->with('error', "Please submit an email address!"); 
     } 
     $user = $this->registerUser($request->input('email')); 
     /** 
     * [$user register a new user and set session] 
     * @var Request 
     */ 
     $request->session()->set('user', $user); 
     } 

     return $next($request); 
    } 

ための次のメソッドを持っているが、私はので、私は

public function testHasSession() 
    { 
     $faker = \Faker\Factory::create(); 
     Session::shouldReceive('get') 
     ->once() 
      ->with('user'); 
     $response = $this->middleware->handle(Request::create(route('brokerquotes.request.store'), 'POST', ['email'=> $faker->email]), function ($request) { 
      return 'OK'; 
     }); 
     $this->assertResponseOK(); 
    } 

ではPHPUnitとユニット/ファンクション・テストに新たに開始していますが、それは動作しません。リクエストセッションが設定されていることと、ミドルウェアとバインドされたそれぞれのルートがトリガされたときにコントローラメソッドが呼び出されたことをテストするにはどうすればよいですか?お使いのユーザエンティティがフィールドemailを持っていると仮定して...

public function testHasSession() 
{ 
    $faker = \Faker\Factory::create(); 
    $email = $faker->email; 
    $this->post(route('brokerquotes.request.store'), ['email'=> $email]); 
    $this->assertResponseOk(); 
    $this->assertEquals($email, session('user')->email); 
} 

答えて

1

あなたはこのような何かを行うことができます。