2014-10-28 4 views
0

내 Laravel5 응용 프로그램에 대한 방법은 내가 PhpSpec에서 테스트하기 위해 노력하고 있지만, 다음과 같은 오류를 던지고 계속 있습니다PhpSpec 호출 예상 정확한

App/Helpers/RecurrRule        
37 ! it should return a recurrence collection method call: 
    Double\ChurchRepositoryInterface\P6->getChurchTimezone(1) was not expected. 
    Expected calls are: 
    - getChurchTimeZone(exact(1)) 

이 방법은 배열을 전달, 나는 조롱 할 모델의 getChurchTimezone 메소드가 타임 존을 리턴합니다.

방법 : 내 다른 사양 내가 자주 $double->method('someArgument')->willReturn('blah') 같은 일을하고 있어요,하지만 어떤 이유로이 특정한 경우가 작동하지 않는 나는 이유에 당황하고있어에서

public function __construct(Rule $rule, ArrayTransformer $arrayTransformer, ChurchRepositoryInterface $church) 
{ 
    $this->rule = $rule; 
    $this->arrayTransformer = $arrayTransformer; 
    $this->church = $church; 
} 


public function getRecurrenceCollection($schedule) 
{ 
    $timezone = $this->church->getChurchTimezone($schedule['church_id']); 
    // more code 
} 

.

배열의 복사본을 제공하려고 시도했습니다. 정수를 직접 입력 해 보았습니다. $ this-> church-> getChurchTimezone을 자체 메서드로 가져 와서 배열이나 정수를 전달하려고했습니다. 그러나 PhpSpec이 예상 호출 오류에서 '정확한'것으로 항상 돌아 오는 경우에도 마찬가지입니다.

사양 :

class RecurrRuleSpec extends ObjectBehavior 
{ 

    protected $schedule = [ 
     'church_id' => 1, 
     'start' => '2014-11-21 10:36:07', 
     'end' => '2014-11-21 11:36:07', 
     'recurr_rule' => 'FREQ=WEEKLY;BYDAY=SU;', 
     'recurr_until' => '2015-02-22 10:36:07', 
    ]; 

    function it_is_initializable() 
    { 
     $this->shouldHaveType('App\Helpers\RecurrRule'); 
    } 

    /** 
    * Setup our mock, with doubles matching our constructor 
    */ 
    function let($rule, $arrayTransformer, $church) 
    { 
     $rule->beADoubleOf('\Recurr\Rule'); 
     $arrayTransformer->beADoubleOf('\Recurr\Transformer\ArrayTransformer'); 
     $church->beADoubleOf('\App\Repositories\ChurchRepositoryInterface'); 

     $this->beConstructedWith($rule, $arrayTransformer, $church); 
    } 

    function it_should_return_a_recurrence_collection($rule, $arrayTransformer, $church) 
    { 
     $church->getChurchTimeZone(1)->willReturn('Europe/Dublin'); 
     // $church->getChurchTimeZone($this->schedule['church_id'])->willReturn('Europe/Dublin'); 
     // $church->getChurchTimeZone(Argument::any())->willReturn('Europe/Dublin'); 
     $rule->createFromString()->willReturn([]); 
     $arrayTransformer->transform()->willReturn([]); 


     $this->getRecurrenceCollection($this->schedule)->shouldReturn([]); 
    } 

다음은 동일한 방법을 사용하고 당신은 사양에서와 다르게 메소드 이름의 철자 한

function it_should_return_a_one_dimensional_numeric_array_of_servers($config) 
{ 

    $expectedResult = ['domain.com', 'domain2.com']; 

    $config->get('servers')->willReturn($this->configGetReturn); 
    $this->serverArray()->shouldBeArray(); 
    $this->serverArray()->shouldEqual($expectedResult); 
} 

답변

0

전달 다른 내 응용 프로그램에서 스펙의 또 다른 예입니다 코드 : getChurchTimeZone/getChurchTimezone

단서는 실제로 오류 메시지에 있습니다.

그런데
getChurchTimezone(1) was not expected. 

Expected calls are: 
- getChurchTimeZone(exact(1)) 

,이처럼하자() 함수를 작성하여 PhpSpec의 마법의 일부를 이용할 수 있습니다 :

function let(Rule $rule, ArrayTransformer $arrayTransformer, ChurchRepositoryInterface $church) 
{ 
    $this->beConstructedWith($rule, $arrayTransformer, $church); 
} 

PhpSpec 자동으로합니다 (하자에 typehints에서 예상되는 모의 객체를 파악) 서명.