gpt4 book ai didi

unit-testing - 在 PHPUnit 测试中使用 Symfony Router 组件生成 URL

转载 作者:行者123 更新时间:2023-11-28 21:26:23 25 4
gpt4 key购买 nike

我正在尝试在 PHPUnit 中为一个简单的方法编写一个测试,该方法返回一个基于子域的 Symfony 路由的 URL。我不确定我的测试是否可以正确访问 Symfony Router 组件,这就是它失败的原因,但我现在似乎无法让它通过。

这是我遇到的错误:

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

这是我的测试和数据提供者:

/**
* @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',
],
];
}

这是我的 getRouterMock 方法:

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

这是我正在测试的方法:

/**
* @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);
}

最佳答案

但是你没有正确访问 Symfony 路由器,你在 mock 它。在这个模拟中,您没有定义在 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;
}

关于unit-testing - 在 PHPUnit 测试中使用 Symfony Router 组件生成 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39589115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com