2012-05-21 8 views
10

Il client di test di Django restituisce un oggetto Response di prova che include le variabili di contesto del modello utilizzate per il rendering del modello. https://docs.djangoproject.com/en/dev/topics/testing/#django.test.client.Response.contextCome testare le variabili di contesto del template con Flask

Come posso accedere alle variabili di contesto del modello durante il test in Flask?

vista Esempio: prova

@pgt.route('/myview') 
def myview(): 
    context = { 
     'var1': 'value 1', 
     'var2': 'value 2', 
     'var3': 'value 3', 
    } 
    return render_template('mytemplate.html', **context) 

Esempio:

class MyViewTestCase(unittest.TestCase): 
    def setUp(self): 
     self.app = create_app() 
     self.client = self.app.test_client() 

    def test_get_success(self): 
     response = self.client.get('/pgt/myview') 

     # I don't want to do this 
     self.assertIn('value 1', response.data) 

     # I want to do something like this 
     self.assertEqual(response.template_context['var1'], 'value 1') 

risposta

22

Grazie a @andrewwatts ho usato (una versione di) Flask-Testing

from flask.ext.testing import TestCase 


class MyViewTestCase(TestCase): 
    def create_app(self): 
     # This method is required by flask.ext.testing.TestCase. It is called 
     # before setUp(). 
     return create_app() 

    def test_get_success(self): 
     response = self.client.get('/pgt/myview') 
     self.assertEqual(self.get_context_variable('var1'), 'value 1') 
-1

Da queste informazioni limitate, io suggerirebbe rompere il codice contesto producendo in un'unità e prova separata che direttamente. Mappare l'esempio precedente:

def get_context(): 
    context = { 
     'var1': 'value 1', 
     'var2': 'value 2', 
     'var3': 'value 3', 
    } 
    return context 

@pgt.route('/myview') 
def myview(): 
    return render_template('mytemplate.html', **get_context()) 
+1

Il contesto modello deve essere creato all'interno della funzione di visualizzazione/metodo. Posizionarlo all'esterno solo per i test non è un buon modo. Il modo migliore è testare il contesto tramite [flask-testing] (http://packages.python.org/Flask-Testing/). – Jarus

Problemi correlati