2013-04-04 6 views
1

J'ai un formulaire HTML qui contient l'entrée suivante: <input type="file" name="sentFile" /> Le formulaire n'a pas été généré avec $this->createFormBuilder(). J'ai écrit une classe que extends WebTestCase. Sa méthode d'essai effectue les opérations suivantes:Tests fonctionnels Symfony: recevoir le fichier téléchargé

$crawler = $client->request('GET', '/users/import'); 
$buttonCrawlerNode = $crawler->selectButton('Import'); 
$form = $buttonCrawlerNode->form(); 
$testfile = 'import_users.csv'; 
$destination = 'F:/www/symfony/web/uploads/' . $testfile; 
$form['sentFile']->upload($destination); 
$form['myparam'] = 'hello'; 
$crawler = $client->submit($form); 

Mais quand je lance le test avec la commande phpunit, la méthode du contrôleur qui reçoit la forme affichée montre un $_FILES vide. L'autre entrée (myparam) est correctement reçue. Alors, comment utiliser le fichier téléchargé?

PS:

  • Je n'ai pas réussi à utiliser PHPT dans Symfony (stackoverflow.com/questions/4922207/integrate-phpt-test-cases-with-phpunit/4925061).
  • Je ne l'ai pas essayé Sélénium encore

Références:

+0

Appellerait $ request-> files-> keys() retourner quelque chose dans votre contrôleur? –

+0

Merci Jakub, cela a résolu mon problème! Je ne savais pas à propos de cette propriété. J'ai donc reçu cet objet UploadedFile et demandé ses propriétés pour mapper celles de $ _FILE que j'ai utilisées précédemment dans mon code de traitement de fichier. – Swergas

+0

Je voulais juste vous demander si garder un chemin absolu '' F:/www/symfony/web/uploads/''pour le répertoire uplaod est une bonne pratique? –

Répondre

1

Le contenu de $_FILES ne semble pas être modifiable pour simuler un téléchargement de fichier, donc une solution consiste à utiliser la classe http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/File/UploadedFile.html. Comme Jakub l'a dit, quand un formulaire est soumis comme je l'ai écrit dans ma question, l'objet Request du contrôleur est rempli avec ce contenu, donc nous pouvons utiliser $ request-> files-> get ('sendFile') pour obtenir le UploadedFile cela correspond au fichier envoyé via l'entrée sentFile du formulaire.

+0

Exactement. Utilisez toujours les abstractions Symfony de HttpFoundation sur les variables globales. –

Questions connexes