как протестировать переменные шаблона, переданные в шаблон 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