2016-09-20 2 views
0

하위 도메인에 대한 Symfony 경로를 기반으로 URL을 반환하는 간단한 방법으로 PHPUnit에서 테스트를 작성하려고합니다. 내 테스트에 Symfony 라우터 구성 요소에 대한 적절한 액세스 권한이 있는지 여부가 확실하지 않아서 넘어지고 있습니다.하지만 지금 당장은 통과하지 못하는 것 같습니다.PHPUnit 테스트에서 symfony 라우터 구성 요소로 URL 생성

/** 
* @return \Symfony\Bundle\FrameworkBundle\Routing\Router 
*/ 
protected function getRouterMock() 
{ 
    return $this->getMockBuilder('\Symfony\Bundle\FrameworkBundle\Routing\Router') 
     ->disableOriginalConstructor() 
     ->setMethods(['generate', 'supports', 'exists']) 
     ->getMockForAbstractClass(); 
} 

이가이다 : 이것은 내 getRouterMock 방법은

/** 
* @dataProvider dataProvider 
*/ 
public function testReturnsBillingURL(Course $course, string $expectedUrl) 
{ 
    $mailerHelper = new MailerHelper($this->getRouterMock()); 
    $this->assertEquals($expectedUrl, $mailerHelper->getBillingUrlForSubdomain($course, true)); 
} 

public function dataProvider() 
{ 
    return [ 
     'crmpicco.co.uk' => [ 
      'site' => (new Course()) 
       ->setSubdomain('crmpicco'), 
      'expectedUrl' => 'https://www.crmpicco.co.uk/en/admin/billing', 
     ], 
    ]; 
} 

입니다 : 이것은 내 테스트 및 데이터 공급자가

There was 1 error:

1) CRMPiccoBundle\Tests\Services\MailerHelperTest::testReturnsBillingURL with data set "crmpicco.co.uk" (CRMPiccoBundle\Entity\Course Object (...), ' https://www.crmpicco.co.uk/en/admin/billing ') TypeError: Return value of CRMPiccoBundle\Services\MailerHelper::getBillingUrlForSubdomain() must be of the type string, null returned

입니다 :

내가 점점 오전 오류입니다 방법 나는 시험하고있다 :

/** 
* @param Course $course 
* @param bool $absoluteUrl 
* 
* @return string 
*/ 
public function getBillingUrlForSubdomain(Course $course, bool $absoluteUrl = true) : string 
{ 
    return $this->router->generate('crmpiccobundle_portal_billing', [ 
     'subdomain' => $site->getSubdomain(), 
    ], $absoluteUrl); 
} 

답변

1

하지만 Symfony 라우터에 제대로 액세스하지 못하면 조롱하고있는 것입니다. 그리고이 모의에서는 generate() 메서드 호출에서 반환 할 내용을 정의하지 않으므로 null을 반환하는 것은 당연합니다.

누락 된 조각

/** 
* @return \Symfony\Bundle\FrameworkBundle\Routing\Router 
*/ 
protected function getRouterMock() 
{ 
    $mock = $this->getMockBuilder('\Symfony\Bundle\FrameworkBundle\Routing\Router') 
       ->disableOriginalConstructor() 
       ->setMethods(['generate', 'supports', 'exists']) 
       ->getMockForAbstractClass(); 

    $args = ['crmpiccobundle_portal_billing', [ 
     'subdomain' => "crmpicco", 
    ], true]; 

    $mock->expects($this->any()) 
     ->method('generate') 
     ->withArgs($args) 
     ->will($this->returnValue('https://www.crmpicco.co.uk/en/admin/billing')); 

    return $mock; 
} 
입니다
관련 문제