2013-05-29 6 views
0

J'ai une vue FLASK python avec seulement l'implémentation de la méthode POST. Je n'ai pas besoin d'un GET car un modèle externe afficherait des données dans cette vue. Maintenant, je veux écrire un test unitaire pour cette vue, où je veux me moquer de la requête POST initiale et affirmer que l'implémentation de la vue fonctionne correctement.Faux Requête HTTP POST

Exemple de modèle externe qui accédera à ma mise en œuvre de la vue:

<HTML> 
    <HEAD> 
    <TITLE> New Document </TITLE> 
    <META NAME="Author" CONTENT="Richard Ward"> 
    <META NAME="Keywords" CONTENT=""> 
    <META NAME="Description" CONTENT="Test Page"> 
    </HEAD> 

    <BODY> 
     <FORM METHOD="POST" ACTION="www.myView.com/testview"> 
     <INPUT TYPE="hidden" NAME="employeeId" value="304253498022"> 
     <INPUT TYPE="hidden" NAME="employeeName" value="testName"> 
     <INPUT TYPE="submit" name="submit" value="Show Information"> 
     </FORM> 
    </BODY> 
</HTML> 

Ma vue classe

class TestView(MethodView): 
    app = None 
    def post(self): 
     """ 
     Implementation of the post request for this view 
     """ 
     employeeId= request.form.get('employeeId', None) 
     employeeName = request.form.get('employeeName', None) 

     # some data processing code 

     return render_template("summary.html") 

    @classmethod 
    def registerSelf(cls, app): 
     """ 
     Registers itself as a view with the passed Flask application 
     """ 
     TestView.app = app 
     app.flaskApp.add_url_rule('/testview', view_func=TestView.as_view('testview')) 

Je veux appeler directement le poste de mon point de vue et de transmettre des données de formulaire simulées dans le corps de la demande

+0

vous devez utiliser le sélénium ou vous pouvez utiliser des flacons construit dans le client de test? http://flask.pocoo.org/docs/testing/, http://stackoverflow.com/a/15838404/594589 – dm03514

+0

l'utilisation du flask intégré au client de test facilite-t-il la simulation de la requête POST? – Priyam

+0

Oui, c'est ce que le client de test est conçu pour faire – dm03514

Répondre

0

J'étais coincé dessus pendant 2 heures et il se trouve que vous pouvez simplement passer un dictionnaire comme données utiles dans votre test, et vous pourrez accéder à i t à partir de votre code via request.form.get

code de test Exemple

from <the module you want to test> import app 
    app.testing = True 
    self.app = app.test_client() 
    self.app.post(<endpoint name, for example /index>, data={ 
     'employeeId': '1', 
     'employeeName': 'Ruth'})