Подтвердить что ты не робот

Контекст тестовой фляги render_template()

Вопрос с колдуном Newbie.

У меня есть маршрут Flask, который выглядит так:

@app.route('/')                                                                 
def home():                                                                                                                  
    return render_template(                                                     
        'home.html',                                                            
        greeting:"hello"                                       
    )                                                                           

Как проверить, что был обработан шаблон 'home.html', и что в контексте render_template() определена переменная greeting с определенным значением?

Они должны быть (и, вероятно, есть) довольно легко протестировать, но я действительно не уверен, как это сделать с помощью Flask и unittest.

4b9b3361

Ответ 1

Вы можете использовать метод assert_template_used TestCase, предоставленный flask-testing.

from flask.ext.testing import TestCase

class MyTest(TestCase):

    def create_app(self):
        return myflaskapp

    def test_greeting(self):
        self.app.get('/')
        self.assert_template_used('hello.html')
        self.assert_context("greeting", "hello")

Метод create_app должен предоставить ваше флеш-приложение.

Ответ 2

Мое предложение было бы взглянуть на фляжную документацию для тестирования.

Используя документы в качестве руководства, вы должны иметь возможность настроить тестовый пример, который может проверять содержимое ответа.

import unittest
import yourappname

class MyAppTestCase(unittest.TestCase):
    def setUp(self):
        self.app = yourappname.app.test_client()

    def test_greeting(self):
        rv = self.app.get('/')
        self.assertIn('hello', rv.data)

где yourappname - имя вашего приложения/проекта.

Ответ 3

Официальная документация Flask предполагает, что вы используете template_rendered сигнал (доступный с версии 0.6) для модульного тестирования ваших шаблонов и переменных, используемых для его отображения.

Например, вот менеджер контекстных контекстов, который можно использовать в unittest для определения того, какие шаблоны были визуализированы и какие переменные были переданы шаблону:

from flask import template_rendered
from contextlib import contextmanager

@contextmanager
def captured_templates(app):
    recorded = []
    def record(sender, template, context, **extra):
        recorded.append((template, context))
    template_rendered.connect(record, app)
    try:
        yield recorded
    finally:
        template_rendered.disconnect(record, app)

Теперь это можно легко связать с тестовым клиентом:

with captured_templates(app) as templates:
    rv = app.test_client().get('/')
    assert rv.status_code == 200
    assert len(templates) == 1
    template, context = templates[0]
    assert template.name == 'index.html'
    assert len(context['items']) == 10

Ответ 4

Вы можете использовать настройку Jinja на своей странице Html, передать переменную на страницу и посмотреть, обновляется ли она.

http://flask.pocoo.org/docs/0.11/templating/#jinja-setup

http://jinja.pocoo.org/

В качестве примера:

шаблон колбы

@app.route('/')                                                                 
def home():                                                                                                                  
    return render_template(                                                     
        'home.html',                                                            
        greetingDictionary = {"greeting": "hello" , "forthoseabouttorock" :"wesaluteyou" }                                       
    )   

html page

{% for key in greetingDictionary %}
<h1>{{key}}</h1>
<p>{{greetingDictionary[key]}}</p>
{% endfor %}