如何解决Symfony 3,控制器在 E2E 测试中使用的模拟类
我有一个简单的控制器,当访问它时,它会在跟踪重定向的同时将用户重定向到一个 URL。我的实现如下所示:
<?PHP
namespace MyApp\WebBundle\Controller;
use MyBundle\Trackers\Click as ClickTracker;
class ClickOutController()
{
private $clickTracker;
public __constructor(ClickTracker $clickTracker)
{
$this->clickTracker = $clickTracker;
}
function redirect()
{
// ... do some work
$toUrl = 'https://latheesan.com';
$this->clickTracker->track([
'someKey' => 'abcd1234','toUrl' => $toUrl,]);
// redirect code here
}
}
我正在编写 E2E 测试,以确保重定向前跟踪的业务需求按预期工作。因此,在我的测试中,我想调用控制器方法并且只模拟 MyBundle\Trackers\Click
我的测试如下:
<?PHP
use MyBundle\Trackers\Click as ClickTracker;
class RedirectTest extends WebTestCase
{
public function testRedirectsAreTracked()
{
// GIVEN: Custom mock
$customClient = self::createClient();
$mockedClickTracker = $this->getMockBuilder(ClickTracker::class)
->disableOriginalConstructor()
->getMock();
// GIVEN: Expected track params
$expectedTrackParams = [
'someKey' => 'abcd1234','toUrl' => 'https://latheesan.com',];
// GIVEN: Custom mock expectation
$mockedClickTracker->expects($this->once())
->method('track')
->with([$expectedTrackParams]);
$customClient
->getKernel()
->getContainer()
->set('app.trackers.click',$mockedClickTracker);
// WHEN: User is redirected
$customClient->request('GET','/redirect');
// THEN: Assert expected behavIoUr
$this->assertEquals(
Response::HTTP_OK,$customClient->getResponse()->getStatusCode(),"No 200 Response"
);
}
}
在我的 config_test.yml
(测试环境特定覆盖)中,我已经注册了这样的类别名:
services:
app.trackers.click:
class: MyBundle\Trackers\Click
当测试运行时,模拟的实现没有被使用并且原始实现被击中,所以我收到这个错误:
当调用 1 次时,方法名称的期望失败等于 'track'。 方法预期调用1次,实际调用0次。
在 E2E 测试中,您究竟如何模拟控制器使用的单个类?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。