2017-02-13 12 views
0

나는 Config facade에 의존하는 패키지를 만들고 있습니다. 코드 자체는 정상적으로 작동하지만 테스트 할 때 문제가 발생합니다. 모의은 Laravel없이 Config Facade를 밝게합니다

Config::shouldReceive('foo.bar') 
    ->andReturn(true); 

으로 많은 others

, 나는 몇 가지 문제에 부딪쳤다 :

처음에 나는이 코드를 사용했다.

내가 나중에 Config 외관을 조롱하는 것을 읽었습니다 isn't encouraged.

그것을 해결하기 위해, 대부분의 사람들은 대신 다음을 사용하는 것이 좋습니다 경향이있다 : 당신이 Laravel/루멘에서 테스트하는 경우 내가 이해 할수

Config::set('foo.bar', true); 

이 잘 작동합니다.

하지만 내 문제는 내가 아닙니다. 내가 얻을 수 있기 때문에 문제가 해결되지 않습니다, 그래서 난 그냥 몇 Illuminate 패키지에 의존 : 이 시점에서 RuntimeException: A facade root has not been set.

가, 일부는 난 그냥 Config 저장소 의존성을 주입해야한다고 제안 수도 있지만 나는 Config 외관을 사용하고 있습니다 Eloquent 모델에서 사용되는 특성 때문에 DI가 작동하지 않습니다.

내가 태클 할 수있는 다른 방법이 있습니까?

감사합니다!

PS :이 질문은 또한 유사한 문제로 실행 분들을 위해 Laracasts

답변

0

에 게시 된, 나는 마침내이 문제를 해결하는 올바른 방법을 발견했습니다.

테스트 Laravel 패키지는 Testbench 패키지에 대한 것입니다. documentation에서

:

는 테스트 벤치 구성 요소를 사용하려면, 당신이 할 필요가 대신 PHPUnit\Framework\TestCaseOrchestra\Testbench\TestCase을 확장합니다.

이렇게하면 구성 값을 설정하는 것은 전체 Laravel 설치 에서처럼 Config::set()을 호출하는 것입니다. 더 이상 Mockery 문제가 없습니다.

-1

나는 같은 문제에 직면했다. 루멘 5.4 을 사용하면 Config::set('key', 'value')을 사용하지 않았습니다. 그래서 나는 이런 식으로 사용해야했다. 당신의 문제가 내 관련이 없습니다

//code 
use Illuminate\Support\Facades\Config; 

Config::get('key'); //instead config('key'); 
+0

//test use Illuminate\Support\Facades\Config; Config::shouldReceive('get') ->once() ->with('key') ->andReturn('value'); 

. Lumen을 사용하고 있는데, 여전히'Illuminate' 패키지의 대부분을 가지고 있기 때문에,'Config :: set()'은'bootstrap/app.php'에서 Facades를 활성화하는 한 작동해야합니다. 필자가 사용할 수있는 전체 프레임 워크가없는 독립형 환경에서 Laravel/Lumen 패키지를 테스트하기위한 용도로 사용하므로 Testbench에 의존해야합니다.또한 문서에 언급 된대로'Config'를 조롱하는 것은 좋은 방법이 아닙니다. 그러므로, downvote. –