【问题标题】:Symfony2: pass GET parameters for a phpunit functional testSymfony2:为 phpunit 功能测试传递 GET 参数
【发布时间】:2016-09-22 07:41:20
【问题描述】:

在扩展 WebTestCase 的测试中,我想测试一些东西,这取决于传递 GET 参数。

可以在此处找到 POST 参数的解决方案: Symfony2 Functional test: Passing form data directly

但如果我将这个类比用于 GET,它就不起作用了。

测试代码:

    // given
    $client = static::createClient();
    $paramValue = 'frwkuh437iwaw';

    // when
    $client->request(
        'GET',
        '/',
        ['paramName' => $paramValue],
        [],
        [
            'HTTP_Host'            => 'boys2go.com',
            'REMOTE_ADDR'          => '127.0.0.1',
            'HTTP_X-FORWARDED-FOR' => '127.0.0.1',
        ]
    );

参与评估他们的班级:

        $crossSaleParametersValue = $requestStack
            ->getCurrentRequest()
            ->query->get('paramName');

 if (!empty($crossSaleParametersValue)) {
            echo 'crossSale';
}

有人知道如何传递我的 GET 参数吗?

在“/”之后添加它们的肮脏尝试也不起作用。

如何将我的 GET 参数放入我的测试中?

【问题讨论】:

    标签: symfony get phpunit


    【解决方案1】:

    解决方案可能是:

    // Preferable, write this method in a parent class (that extends abstract
    // class WebTestCase) to be used in other tests too
    protected static function getUrl($route, $params = array())
    {
        return self::getKernel()->getContainer()->get('router')->generate($route, $params, UrlGeneratorInterface::ABSOLUTE_URL);
    }
    
    public function testDemo() {
        $client = static::createClient();
        $paramValue = 'frwkuh437iwaw';
        $url = $this->getUrl('route_name');
    
        // when
        $client->request(
            'GET',
            $url . '?paramName=' . $paramValue,
            [],
            [],
            [
                'HTTP_Host'            => 'boys2go.com',
                'REMOTE_ADDR'          => '127.0.0.1',
                'HTTP_X-FORWARDED-FOR' => '127.0.0.1',
            ]
        );
    }
    

    【讨论】:

    • 只附加字符串而不调用getUrl有什么区别?你的 getUrl 的 $params 参数 - 应该去那里?我的数组带有 GET 参数?
    • 如果你在 Symfony 中有这样定义的路由:@Route("/edit/{id}", name="edit"), $params from getUrl() 应该包含一个数组 [' id'] => 99. 在你的测试中,你发送一个查询参数,它是不同的。
    猜你喜欢
    • 2015-06-08
    • 2015-06-10
    • 2021-12-04
    • 2013-07-08
    • 2015-09-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多