如何在CakePHP 1.2中将querystring传递给testAction?
在CakePHP中,在url中放置查询字符串不会导致它像直接调用控制器时那样被自动解析和拆分 例如:如何在CakePHP 1.2中将querystring传递给testAction?,php,unit-testing,cakephp,cakephp-1.2,Php,Unit Testing,Cakephp,Cakephp 1.2,在CakePHP中,在url中放置查询字符串不会导致它像直接调用控制器时那样被自动解析和拆分 例如: $this->testAction('/testing/post?company=utCompany', array('return' => 'vars')) ; 将导致: [url] => /testing/post?company=utCompany 通过web浏览器直接调用url会导致: [url] => Array ( [url] =&
$this->testAction('/testing/post?company=utCompany', array('return' => 'vars')) ;
将导致:
[url] => /testing/post?company=utCompany
通过web浏览器直接调用url会导致:
[url] => Array
(
[url] => testing/post
[company] => utCompany
)
在不编辑CakePHP源代码的情况下,在运行单元测试时是否有办法拆分查询字符串?我有一个黑客(即可能不适用于未来的CakePHP版本)或未记录的特性 如果第二个testAction参数包含一个名为“url”的命名数组,那么这些值将被放置在控制器中的$this->params对象中。这给了我们与直接调用控制器时相同的净结果
$data = array ('company' => 'utCompany') ;
$result = $this->testAction('/testing/post', array
(
'return' => 'vars',
'method' => 'get',
'url' => $data)
) ;
对于我需要做的事情,我对这种方法很满意。我将很快向社区开放这个问题,以便将来能够提供更好的答案。CakePHP确实提供了某种级别的url拆分,但它似乎只在运行时配置中有效,而在测试配置中无效。如果这是故意的,我会联系CakePHP 我建议您的querystring解析器使用PHP函数 我相信你可以这样做:
$result = explode ('&', $queryString, -1) ;
这将使您的密钥对位于单独的数组槽中,您可以在其上迭代并执行第二次分解,如下所示:
$keyPair = explode ('=', $result[n], -1) ;
然而,所有这些都是说,最好在CakePHP的引擎盖下偷看一下,看看他们在做什么
我上面键入的内容无法正确处理查询字符串包含html转义字符(前缀为&)的情况,也无法处理十六进制编码的url字符串。使用_GET['parmname'] 这些答案都不会出现在蛋糕1.3中。您应该在testAction调用之前设置以下内容:
$this->uu savedGetData['company']='utcompany'代码>这在Cake 1.3中不起作用。在测试操作调用之前,应该设置以下内容:$this->\u savedGetData['company']='utcompany'代码>