2012-05-21 12 views
10

El cliente de prueba de Django devuelve un objeto de respuesta de prueba que incluye las variables de contexto de plantilla que se utilizaron para representar la plantilla. https://docs.djangoproject.com/en/dev/topics/testing/#django.test.client.Response.contextCómo probar variables de contexto de plantilla con Flask

¿Cómo puedo obtener acceso a las variables de contexto de la plantilla mientras las pruebas en el Frasco?

Ejemplo vista:

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

Ejemplo de Ensayo:

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') 

Respuesta

22

Gracias a @andrewwatts I utilizado (una versión de) 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

partir de esta información limitada, sugeriría romper el código contexto productoras en una unidad y la prueba separada que directamente. Mapeo del ejemplo anterior:

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

El contexto de la plantilla debe ser creado en el interior de la función de vista/método. Colocarlo afuera solo para probar no es una buena manera. La mejor manera es probar el contexto a través de [matraz-prueba] (http://packages.python.org/Flask-Testing/). – Jarus

Cuestiones relacionadas