cómo realizar una prueba unitaria de las variables de plantilla pasadas a la plantilla jinja2 desde el controlador de solicitudes webapp2

Nunca he hecho pruebas de unidad antes. Quiero dominarlo.

Estoy tratando de probar mis controladores webapp2. Para hacer esto, pensé que sería una buena idea enviar una solicitud al manejador, por ejemplo:

<code>request = webapp2.Request.blank('/')
# Get a response for that request.
response = request.get_response(main.app)
</code>

El problema es que la respuesta es principalmente un montón de HTML, etc.

Quiero ver lo que se pasó a mi plantilla jinja2 desde el controlador antes de que se convirtiera en HTML.

Quiero que mi prueba llegue al estado dentro del código de clase del manejador. No puedo ver cómo se veían ciertas variables en el controlador de respuestas, y luego quiero ver cómo se ven las plantillas dict antes de pasarlas a render_to_response ()

Quiero probar estas variables tienen los valores correctos.

Aquí está mi código de prueba hasta ahora, pero estoy atascado porque response = request.get_response () solo me da un montón de html y no las variables en bruto.

<code>import unittest
#from google.appengine.ext import db
#from google.appengine.ext import testbed
#from google.appengine.datastore import datastore_stub_util
import main
import webapp2

class DemoTestCase(unittest.TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def testNothing(self):
        self.assertEqual(42, 21 + 21)

    def testHomeHandler(self):
        # Build a request object passing the URI path to be tested.
        # You can also pass headers, query arguments etc.
        request = webapp2.Request.blank('/')
        # Get a response for that request.
        response = request.get_response(main.app)

        # Let's check if the response is correct.
        self.assertEqual(response.status_int, 200)
        self.assertEqual(response.body, 'Hello, world!')


if __name__ == '__main__':
    unittest.main()
</code>

y aquí está mi manejador:

<code>class HomeHandler(BaseHandler):
    def get(self, file_name_filter=None, category_filter=None):
        file_names = os.listdir('blog_posts')
        blogs = []

        get_line = lambda file_: file_.readline().strip().replace("<!--","").replace("-->","")

        for fn in file_names:
            with open('blog_posts/%s' % fn) as file_:
                heading = get_line(file_)
                link_name = get_line(file_)
                category = get_line(file_)

            date_ = datetime.strptime(fn.split("_")[0], "%Y%m%d")

            blog_dict = {'date': date_, 'heading': heading,
                         'link_name': link_name,
                         'category': category,
                         'filename': fn.replace(".html", ""),
                         'raw_file_name': fn}

            blogs.append(blog_dict)

        categories = Counter(d['category'] for d in blogs)
        templates = {'categories': categories,
                     'blogs': blogs,
                     'file_name_filter': file_name_filter,
                     'category_filter': category_filter}

        assert(len(file_names) == len(set(d['link_name'] for d in blogs)))

        self.render_template('home.html', **templates)
</code>

y aquí está mi basehandler:

<code>class BaseHandler(webapp2.RequestHandler):
    @webapp2.cached_property
    def jinja2(self):
        return jinja2.get_jinja2(app=self.app)

    def render_template(self, filename, **kwargs):
        #kwargs.update({})
        #TODO() datastore caching here for caching of (handlername, handler parameters, changeable parameters, app_upload_date)
        #TODO() write rendered page to its own html file, and just serve that whole file. (includes all posts). JQuery can show/hide posts.
        self.response.write(self.jinja2.render_template(filename, **kwargs))
</code>

¿Quizás tengo una idea equivocada de cómo hacer pruebas de unidad, o tal vez debería haber escrito mi código de una manera que facilite la prueba? ¿O hay alguna forma de obtener el estado de mi código?

Además, si alguien reescribiera el código y cambiara los nombres de las variables, las pruebas se romperían.

Por favor avise sobre mi situación: X

Respuestas a la pregunta(2)

Su respuesta a la pregunta