2015-10-21 2 views
0

У меня есть маленький средний посуда, для которых я хотел бы написать тест для .. Я хотел бы сделать два теста:UnitTest промежуточного слоя в Larave5

  1. Mock role_id с 1; ручка должна возвращаться TRUE
  2. Mock role_id с 2; ручка должна возвращаться FALSE

Как это можно сделать?

namespace App\Http\Middleware; 

use Closure; 
use Auth; 
use Redirect; 

class RedirectIfNotAdminUser { 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) { 
     if (Auth::user()->role_id != config('Roles.admin')) { 
      return Redirect::action('Auth\[email protected]'); 
     } 

     return $next($request); 
    } 

} 

На данный момент тест, который я бегу следующим образом:

public function testIsAdminUser() { 
    $user = factory(App\User::class)->make(['role_id' => '1']); 

    $this->be($user); 

    $response = $this->action('GET', 'admin\[email protected]'); 

    $this->assertEquals(200, $response->getStatusCode()); 
} 

Я также должен был добавить строку в настройках, без него $ this-> быть() не работает

public function setUp() { 
    $this->refreshApplication(); 
} 

Действительно ли это лучший способ проведения теста?

ответ

0

Попробуйте это:

public function setUp() 
{ 
    $this->redirectIfNotAdminUser = new App\Http\Middleware\RedirectIfNotAdminUser; 
} 

public function testIsAdminUser() 
{ 
    // create a $user object (using a factory or something else). 
    // assuming $user has a property role_id = 1. 
    $this->actingAs($user); 

    // create a mock of $request and $next. 
    $response = $this->redirectIfNotAdminUser->handle($request, $next); 

    $this->assertEquals(200, $response->getStatusCode()); 
} 

public function testIsNotAdminUser() 
{ 
    // create a $user object (using a factory or something else). 
    // assuming $user has a property role_id = 2. 
    $this->actingAs($user); 

    // create a mock of $request and $next. 
    $response = $this->redirectIfNotAdminUser->handle($request, $next); 

    $this->assertEquals(302, $response->getStatusCode()); 
} 

Я считаю, что промежуточного возвращает ответ с кодом состояния 200 если это OK и 302, если нет.

Помните, что вы будете один, чтобы создать экземпляр User и он вошел в систему (с использованием метода actingAs()), и вы будете один, чтобы создать издевается из $request и $next, которые будут переданы на ваш Middleware пакет handle() метод.

+0

привет. спасибо за ответ. Я играл вокруг и имел небольшие проблемы с $ this-> actAs и насмешкой $ next из-за его закрытия, поэтому я придумал немного другой тест, который можно увидеть в главной угрозе. – user3402600

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