comment faire correctement le test de téléchargement de fichiers EcomDev PHPUnit avec $_FILES ?
-
29-09-2020 - |
Question
Je souhaite tester la fonction de téléchargement de fichiers dans mon module, mais je suis coincé avec la limitation de is_uploaded_file et move_uploaded_file sur CLI.
Essayer d'émuler les actions de téléchargement de fichiers par l'utilisateur en créant un tableau $_FILES personnalisé :
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);
...
mais quand je débogue, je vois que la fonction move_uploaded_file dans Varien_File_Uploader->_moveFile() renvoie simplement false.
J'ai trouvé une solution pour utiliser un espace de noms personnalisé et remplacer les fonctions move_uploaded_file et is_uploaded_file, mais lorsque j'ai essayé d'ajouter un espace de noms personnalisé dans la classe de test, le test ne s'exécutera pas :
namespace CustomTest;
class Company_Module_Test_Helper_CompanyHelperTests extends \EcomDev_PHPUnit_Test_Case {
...
}
Besoin de conseils dans ce cas, c'est peut-être possible d'une manière ou d'une autre ?Merci
La solution
Ne faites pas d'opérations réelles sur les fichiers dans les tests, moquez-vous Varien_File_Uploader
plutôt.Pour pouvoir le faire, je créerais un getUploader()
méthode dans un assistant.Moquez ensuite cette méthode d'assistance en utilisant la fonctionnalité de remplacement de EcomDev_PHPUnit pour lui permettre de renvoyer le téléchargeur simulé.