2012-10-15 3 views
5

J'ai fait des recherches sur le Web ces deux derniers jours pour essayer de comprendre le problème que j'ai avec WebTest. Cependant, je n'ai pas eu de joie, et je me demandais si quelqu'un ici pourrait être en mesure d'aider. J'utilise le nose pour lancer un test sur une application web que je développe mais qui semble avoir des problèmes avec un formulaire qui contient un champ de téléchargement de fichier. Le formulaire et la validation fonctionnent sur le serveur lorsqu'il fonctionne normalement, et si je lance le code de test à partir d'un shell, cela fonctionne également. Cependant, chaque fois que je lance le code de test à partir du nez, il n'accepte pas les informations soumises.Problème avec nosetests et téléchargement de fichiers

Voici un exemple de la forme:

<form method="POST" enctype="multipart/form-data" action="...."> 
    <input type="text" name="first_name" id="first_name"> 
    <input type="text" name="last_name" id="last_name"> 
    <input type="file" name="thumbnail" id="thumbnail"> 
    <input type="submit" value="Create" name="submit" id="submit"> 
</form> 

Mon code WebTest ressemble à ceci:

response = self.app.get(url(controller=self.controller, action='create')) 
form = response.form              

log.debug(form.submit_fields())           

form.set('first_name', 'test1-1')           
form.set('last_name', 'test1-1')            
form.set('thumbnail', '')             

log.debug(form.submit_fields())           
response = form.submit() 

La réponse que je reçois quand je lance est que la vignette est manquante dans les valeurs soumises , même pensé que le champ n'est pas requis par le validateur de formulaire. Lorsque je compare la sortie de code de nez et quand il en cours d'exécution à travers une coquille, j'ai remarqué que la sortie de submit_fields était différent

Shell Sortie:

[('first_name', ''),('last_name', '')] #First log call 
[('first_name', 'test1-1'),('last_name', 'test1-1'), ('thumbnail', '')] #Second log call 

Nez Sortie:

[(u'first_name', ''), (u'last_name', ''), (u'thumbnail', <File name="thumbnail" id="thumbnail">)] #First log call 
[(u'first_name', 'test1-1'), (u'last_name', 'test1-1'),(u'thumbnail', <File name="thumbnail" id="thumbnail">)] #Second log call 

Comme vous On peut voir qu'il y a une différence dans le shell qui n'a pas le tuple de la vignette, mais le met dans une chaîne vide qui passe sans problème. Cependant, dans Nose il y a déjà un tuple et il ne réinitialise pas la valeur. Est-ce que quelqu'un peut m'aider avec ça? Y a-t-il un problème avec l'utilisation des formulaires en plusieurs parties dans WebTest lors de l'utilisation de l'approche form.submit?

Merci d'avance pour votre aide.

Library Information: Pylônes-1.0.1 WebTest-1.4.0 WebOb-1.2.3 nez-1.2.1

+0

Avez-vous essayé d'utiliser form.set ('thumbnail', '', index = 0)? –

+0

Merci @pi pour votre commentaire, cependant, d'après ce que je comprends la valeur de l'index est seulement nécessaire si leurs champs sont multiples avec le même nom sur le formulaire. Je l'ai essayé juste pour être du bon côté, mais ça n'a rien changé. Il y a évidemment quelque chose d'autre qui me manque ici. –

+1

Avez-vous essayé form.set ('vignette', None)? – alecxe

Répondre

1

Avez-vous essayé d'enlever le log.debug à log.debug(form.submit_fields())? Le nez a parfois été connu pour interagir étrangement avec la journalisation comme il le fait une certaine redirection interne des sorties.

+0

Oui, en fait, la version d'origine ne disposait pas de la connexion. Donc, supprimer cela n'aura aucun effet sur les résultats que je reçois en ce moment. Merci d'avoir pris le temps. –

Questions connexes