php unit-testing cakephp cakephp-1.2

¿Cómo pasar querystring a testAction en CakePHP 1.2?



unit-testing cakephp-1.2 (4)

En CakePHP poner una cadena de consulta en la url no hace que se analice automáticamente y se divida como lo hace normalmente cuando se invoca directamente el controlador.

Por ejemplo:

$this->testAction(''/testing/post?company=utCompany'', array(''return'' => ''vars'')) ;

resultará en:

[url] => /testing/post?company=utCompany

Al invocar la url directamente a través del navegador web, se obtiene:

[url] => Array ( [url] => testing/post [company] => utCompany )

Sin editar la fuente de CakePHP, ¿hay alguna manera de dividir la cadena de consulta cuando se ejecutan pruebas unitarias?


CakePHP proporciona cierto nivel de división de URL, pero parece que solo funciona en la configuración de tiempo de ejecución y no en la de prueba. Me pondré en contacto con CakePHP si esto es intencional.

La sugerencia para su analizador de querystring sería usar la función explotar de PHP.

Creo que puedes hacer algo como esto:

$result = explode (''&'', $queryString, -1) ;

que le daría sus pares de claves en ranuras de arreglos separados sobre los que puede iterar y realizar una segunda explosión de esta manera:

$keyPair = explode (''='', $result[n], -1) ;

Sin embargo, dicho esto, sería mejor echar un vistazo bajo el capó de CakePHP y ver qué están haciendo.

Lo que escribí arriba no manejará correctamente las situaciones en las que su cadena de consulta contiene caracteres html escapados (con el prefijo &), ni manejará cadenas URL urd codificadas.


Tengo lo que es un hack (es decir, puede no funcionar para futuras versiones de CakePHP) o una característica no documentada.

Si el segundo parámetro testAction incluye una matriz llamada llamada ''url'', los valores se colocarán en el objeto $ this-> params en el controlador. Esto nos da el mismo resultado neto que cuando el controlador se invoca directamente.

$data = array (''company'' => ''utCompany'') ; $result = $this->testAction(''/testing/post'', array ( ''return'' => ''vars'', ''method'' => ''get'', ''url'' => $data) ) ;

Estoy satisfecho con este método por lo que necesito hacer. Abriré la pregunta a la comunidad en breve para que en el futuro se pueda proporcionar una mejor respuesta.


use _GET [''nombredelpam''];


Ninguna de estas respuestas se verá afectada en Cake 1.3. En su lugar, debe configurar lo siguiente antes de su llamada de prueba de prueba:

$this->__savedGetData[''company''] = ''utcompany'';