как протестировать переменные шаблона, переданные в шаблон jinja2 из обработчика запросов webapp2

Я никогда раньше не проводил модульное тестирование. Я хочу освоить это.

Я пытаюсь проверить свои обработчики webapp2. Для этого я подумал, что было бы неплохо отправить запрос обработчику, например:

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

Проблема в том, что ответ - это просто набор HTML и т. Д.

Я хочу посмотреть, что было передано моему шаблону jinja2 из обработчика, прежде чем он был преобразован в HTML.

Я хочу, чтобы мой тест достиг состояния в коде класса обработчика. Я хочу, чтобы иметь возможность видеть, как определенные переменные выглядели в обработчике ответа, а затем я хочу посмотреть, как выглядят шаблоны dict до того, как они были переданы в render_to_response ()

Я хочу проверить, что эти переменные имеют правильные значения.

Вот мой тестовый код, но я застрял, потому что response = request.get_response () просто дает мне кучу html, а не необработанные переменные.

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

и вот мой обработчик:

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

и вот мой 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>

Возможно, у меня неправильное представление о том, как проводить модульное тестирование, или, возможно, мне следовало написать свой код так, чтобы его было проще тестировать? или есть какой-то способ узнать состояние моего кода?

Кроме того, если бы кто-то переписал код и изменил имена переменных, то тесты прервутся.

Посоветуйте пожалуйста мою ситуацию: X

Ответы на вопрос(2)

Ваш ответ на вопрос