como unittest as variáveis ​​de modelo passadas para o template jinja2 do manipulador de requisições webapp2

Eu nunca fiz testes unitários antes. Eu quero dominar isso.

Estou tentando testar meus manipuladores webapp2. Para fazer isso, achei que seria uma boa ideia enviar uma solicitação ao manipulador, por exemplo:

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

O problema é que a resposta é basicamente apenas um monte de HTML, etc.

Eu quero olhar para o que foi passado para o meu modelo jinja2 do manipulador antes de ser transformado em HTML.

Quero que meu teste chegue ao estado dentro do código da classe do manipulador. Eu não quero ver como certas variáveis ​​pareciam no manipulador de resposta e, em seguida, quero ver como os modelos de dit se parecem antes de serem passados ​​para render_to_response ().

Eu quero testar essas variáveis ​​com os valores corretos.

Aqui está o meu código de teste até agora, mas estou preso porque response = request.get_response () apenas me dá um monte de html e não as variáveis ​​brutas.

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

e aqui está meu manipulador:

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

e aqui está minha base:

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

Talvez eu tenha a idéia errada de como fazer o teste de unidade, ou talvez eu deveria ter escrito meu código de uma forma que torna mais fácil para testar? ou existe alguma maneira de obter o estado do meu código?

Além disso, se alguém fosse reescrever o código e alterar os nomes das variáveis, os testes seriam interrompidos.

por favor, informe sobre a minha situação: X

questionAnswers(2)

yourAnswerToTheQuestion