微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Symfony 3,控制器在 E2E 测试中使用的模拟类

如何解决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 举报,一经查实,本站将立刻删除。