¿Cómo realizar correctamente la prueba de carga de archivos PHPUnit de EcomDev con $_FILES?
-
29-09-2020 - |
Pregunta
Quiero probar la función de carga de archivos en mi módulo, pero me quedé con la limitación de is_uploaded_file y move_uploaded_file a través de CLI.
Intentando emular las acciones de carga de archivos del usuario creando una matriz $_FILES personalizada:
class Company_Module_Test_Helper_CompanyHelperTests extends EcomDev_PHPUnit_Test_Case {
public function uploadProductImagesTest() {
...
$this->assertTrue(file_exists($testFile));
$this->assertTrue(is_readable($testFile));
$_FILES = array(
...
);
$this->mockSession('customer/session');
$this->customerSession($fixtureCustomerId);
...
pero cuando depuro, veo que move_uploaded_file en la función Varien_File_Uploader->_moveFile() simplemente devuelve falso.
Encontré una solución para usar un espacio de nombres personalizado y anular las funciones move_uploaded_file y is_uploaded_file, pero cuando intenté agregar un espacio de nombres personalizado en la clase de prueba, la prueba no se ejecutó:
namespace CustomTest;
class Company_Module_Test_Helper_CompanyHelperTests extends \EcomDev_PHPUnit_Test_Case {
...
}
¿Necesita algún consejo en este caso, tal vez sea posible de alguna manera?Gracias
Solución
No hagas operaciones reales con archivos en las pruebas, simula Varien_File_Uploader
en cambio.Para poder hacerlo, crearía un getUploader()
método en un ayudante.Luego simula este método auxiliar utilizando la función de reemplazo de EcomDev_PHPUnit para permitirle devolver el cargador simulado.