2014-03-31 4 views
1

아래 코드의 종료로이 코드를 테스트하기가 매우 어려워졌습니다. 이러한 항목을 계속로드하고 완전한 테스트 가능성을 유지하려면 어떻게해야합니까?Laravel에서 클로저 단위 테스트

public function scopeWithCompanyPreferences(Builder $builder) 
{ 
    return $builder->with([ 
      'companies' => function ($query) { 
       $query->with('companies'); 
       $query->with('preference_settings'); 
       $query->with('parent_company'); 
      } 
     ]); 
} 

나는 조롱에게 Mockery::on()의 사용을 사용하여 본 적이 있지만 그 배열 주어진 유용 생각하지 않습니다.

답변

2

당신이 with 방법을 조롱하는 경우는 다음과 같이 Mockery::on()을 사용할 수 있어야합니다 :

$b = \Mockery::mock("your_builder_class"); 
$b->shouldReceive("with") 
    ->with(\Mockery::on(function($x){ 
      // test $x any way you like, for example... 
      // ...a simple check to see if $x["companies"] is a function 
      return is_callable($x["companies"]); 
     })) 
    ->once() 
    ->andReturn("hello!"); 
+0

그래서 여기에 까다로운 것은 방법과 실제로 배열의 경우 하나의 배열을 받아들이고 있다는 것입니다 값은 클로저입니다. – Webnet

+0

'with()'메쏘드의 핵심은 여러분이 기대하는 인자로 코드가 호출되고 있는지 확인하는 것입니다. -'Mockery :: on()'은 여러분이 원하는만큼 간단한 테스트 나 복잡한 테스트를 작성할 수있게합니다. 그 논점을 확인하십시오. – Kryten

+0

이전 주석에서'with' 메소드에 대한 참조는 클래스에'with'가 아닌'\ Mockery :: with'를 참조하기위한 것입니다. 혼란스러워서 죄송합니다. – Kryten