2016-09-27 5 views
1

私はいくつかのテストを書いています。私MustBeAdministrator.phpミドルウェアでLaravel&phpunitが期待されるhttpエラーコードを設定しました

/** @test */ 
    public function a_normal_user_cannot_access_the_admin_panel() 
    { 
    // Note: This is a regular user, not an admin 
    $user = factory(User::class)->create(); 
    $this->actingAs($user); 
    $this->visit('/admin'); 

    // ???? 
    } 

::私は/adminにアクセスすると

public function handle($request, Closure $next) 
    { 
     $user = $request->user(); 

     if ($user && $user->isAdmin) { 
     return $next($request); 
     } 

     abort(403); 
    } 

、ミドルウェアは403エラーで中断しますここに私のテストです。どのように私はhttpエラーがスローされたphpunitでアサートすることができますか?私は$this->setExpectedException()について知っているが、httpエラーでうまく動作しない。これは間違っているのですか?

注:私は非常にphpunitと例外も新しくなっています。だから、これはばかげた質問です。他のファイルが必要な場合はrepo for this project、または尋ねることができます。

+0

を使用することができますねえ、あなたが投稿することができますあなた自身の質問への答え、それは禁止されていません:) – iScrE4m

+0

@ iScrE4m私はそれに答えましたが、2日間回答としてそれを受け入れることはできません:(私はそれを受け入れるでしょう) –

+0

ああ申し訳ありませんが、あなたの答えを正しいものとしてマークしてください。 – iScrE4m

答えて

1
$user = factory(User::class)->create(); 
$this->actingAs($user); 
$this->setExpectedException('Symfony\Component\HttpKernel\Exception\HttpException'); 
$this->get('/admin'); 
throw $this->response->exception; 

Found this articlesetExpectedExceptionライン、throwの行を追加し、getvisitを変更すると、私の問題

+0

答えを正しいものとしてマークしてください。 –

+1

@MihkelAllorgだから、もう2時間それを受け入れることはできません。私はそうするでしょう。 –

0

を解決するように見えたあなたは完全なレスポンスオブジェクトを取得したい場合、あなたはcall方法

/** @test */ 
public function a_normal_user_cannot_access_the_admin_panel() 
{ 
    // Note: This is a regular user, not an admin 
    $user = factory(User::class)->create(); 
    $this->actingAs($user); 
    $response = $this->call('GET', '/admin'); 

    $this->assert(403, $response->status()); 
} 
関連する問題