2017-12-12 19 views
3

Laravel의 request() 도우미를 사용하는 메서드가 포함 된 클래스에서 메서드를 테스트하려고합니다. 이것은 방법 :제대로 조롱하는 방법 Laravel에서 Http Request 클래스를 조명하십시오.

Category 클래스 대해 getRequestURI()을 할 때 시험이 도우미가 제대로 URI를 잡을 수 있도록해야

public function getCanonicalUrl() 
{ 
    return preg_match('/\/sale\/./', request()->getRequestUri()) 
     ? '' 
     : url($this->getUrlKey()); 
} 

하지만 실제로 빈 문자열을 반환합니다. 이것은 내가 시험에 쏟은 천 번 시도 중 하나입니다.

테스트

public function testCanonical() 
{ 
    // ... 

    $requestMock = Mockery::mock(Request::class) 
     ->shouldReceive('getRequestUri') 
     ->andReturn('/sale/random-string'); 

    $this->app->instance(Request::class, $requestMock); 

    // ... 
} 

이 달성 할 수있는 방법의 어떤 아이디어? 미리 감사드립니다.

답변

3

Request 외관을 조롱해서는 안됩니다. 대신 테스트를 실행할 때 get 및 post와 같은 HTTP 도우미 메소드에 원하는 입력을 전달하십시오.

https://laravel.com/docs/5.5/mocking#mocking-facades

+0

그래서'$ this->는 ($ 경로)'이 문제를 해결하기 위해 적절하고 쉬운 방법이었다받을. 감사 – suarsenegger