Unidad de prueba de las cookies en PHP
-
12-10-2019 - |
Pregunta
La práctica por defecto para la funcionalidad de la unidad de pruebas que se basa en información de la sesión / cookie es utilizar una biblioteca de abstracción. Pero lo que si quiero escribir y prueba unitaria esta biblioteca de abstracción? La documentación para el PHP setcookie
function dice que la cookie estará disponible en la siguiente solicitud. Con una herramienta de línea de comandos para las pruebas, no hay tal cosa como una "solicitud". Entonces, ¿cómo puede probar la unidad I Con la configuración correcta?
Quiero probar si todos los parámetros de la función setcookie
se establecen correctamente por mi biblioteca de abstracción. Esos parámetros se fijan de acuerdo con ciertas condiciones y llamadas de método.
La única solución que se me ocurre es burlarse de la función setcookie
con la extensión runkit
, que no quiero instalar. Otras ideas?
Solución
I encontró otro, solución muy simple: contenedor de clase A alrededor de la función PHP setcookie
que es tan simple, que no necesita ser unidad probada:
/**
* Wrapper around setcookie function for better testability
*/
class Cookiesetter {
public function setcookie($name, $value = "", $expire = 0, $path = "",
$domain = "", $secure = false, $httponly = false) {
return setcookie($name, $value, $expire, $path, $domain, $secure, $httponly);
}
}
El método setcookie
puede entonces ser burlado. Esto tiene la ventaja adicional de que puedo poner en práctica otros métodos como expireCookie
.
Otros consejos
Se puede establecer un valor directamente en la matriz $ _COOKIE actual:
<?php
$_COOKIE['test']='hello';
print_r($_COOKIE);
run_tests();
(esto funciona en modo CLI también). Tenga en cuenta que $ _REQUEST no se actualizará por esto.
Sin embargo si sólo está tratando de manipular las cookies para que posteriormente puede acceder a la sesión, por qué no sólo acceder a la sesión directamente:
<?php
$_SESSION['auth_user']='root';
run_tests();
Pero estamos hablando de las pruebas unitarias aquí - no las pruebas de integración -. Lo que sugiere que el código no está muy bien estructurado