2017-02-06 16 views
0

У меня есть метод в Laravel 5,3 проекта, как показано ниже:Как проверить мой простой метод в Laravel

/** 
* returns each section of current url in an array 
* 
* @return array 
*/ 
public function getUrlPath() 
{ 
    return explode("/", $this->request->path()); 
} 

Как я могу создать метод модульного тестирования, чтобы проверить этот метод? Наверное, мне нужно высмеять запрос HTTP-запроса и запрос. Но я не знаю, как это сделать.

+0

Возможно, было бы лучше, если бы вы подумали о том, что вспомогательный метод является самодостаточным, w i-я зависимости, предоставляемые в качестве параметров. Это позволит легко тестировать. 'public function getUrlPathElements ($ path)' позволит вам самостоятельно тестировать его без использования механизма маршрутизации Laravel. –

+0

Вы имели в виду метод, как в этом вопросе? http://stackoverflow.com/questions/29781103/how-to-test-laravel-5-controllers-methods –

ответ

1

Вы должны сделать свой метод самодостаточным, как так

use Request; 
/** 
* returns each section of current url in an array 
* 
* @return array 
*/ 
public function getUrlPath(Request $request) 
{ 
    return explode("/", $request->path()); 
} 

Вы можете добавить Request в качестве параметра содержащего класса, как, что:

use Request; //it is a facade https://laravel.com/docs/5.3/facades 
class MyRequestHandler 
{ 
    protected $request; 
    public function __construct(Request $request) 
    { 
     $this->request = $request; 
    } 

    public function getUrlPath() 
    { 
     return explode("/", $this->request->path()); 
    } 
} 

чем тест как то:

public function testGetUrlPath(){ 
    $expected = ['url','to','path']; 
    $request = Request::create(implode('/', $expected)); // https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/Request.php#L313 
    $class = new MyRequestHandler($request); 

    // Getting results of function so we can test that it has some properties which were supposed to have been set. 
    $result = $class->getUrlPath(); 
    $this->assertEquals($expected, $result); 
}