Как мне проверять HTML в шаблонах Django в процессе разработки? - PullRequest
14 голосов
/ 21 июня 2010

Я еще не использовал встроенные возможности тестирования Django и Python, но я хочу наконец начать ... И одна из самых очевидных вещей, которые я хотел бы контролировать во время всего процесса разработки, -мои страницы проверяются во всех возможных сценариях.

Какой лучший способ сделать это?

Ответы [ 3 ]

7 голосов
/ 21 июня 2010

Хороший вопрос. Я сам этого не делал, так что, надеюсь, будут лучшие ответы, но вы можете захотеть взглянуть на промежуточное ПО для проверки HTML:

«во всех возможных сценариях» может быть слишком много, в зависимости от вашего приложения. Например, если вы создаете следующий Facebook и, таким образом, каждый день принимаете огромные объемы пользовательских данных, в какой-то момент произойдет что-то, что нарушит действительность страницы вашего сайта.

Поскольку ошибки проверки не приводят к разрушению функциональности, может быть приемлемым подходом проверять некоторые ограниченные тестовые данные, а затем реагировать на ошибки по мере их появления. Я считаю, что это известно как тестирование на основе глупости .

2 голосов
/ 19 апреля 2015

Одним из решений является создание сценария, который отображает все шаблоны на основе входного словаря тестовых значений переменных.

Основная логика для получения списка переменных, определенных в шаблонах, следующая:

from django.template.loader import get_template

def extract_required_vars(node):
    if not hasattr(node, 'nodelist'):
        return []
    var_names = []
    for child_node in node.nodelist:
        if isinstance(child_node, VariableNode):
            var_names.append(child_node.filter_expression.token)
        elif isinstance(child_node, ForNode):
            var_names.append(child_node.sequence.var.var)
        elif isinstance(child_node, ExtendsNode):
            template = get_template(child_node.parent_name.var)
            var_names.extend(extract_required_vars(template))
        elif isinstance(child_node, IncludeNode):
            template = get_template(child_node.template.var)
            var_names.extend(extract_required_vars(template))
        var_names.extend(extract_required_vars(child_node))
    return var_names

required_vars = extract_required_vars(get_template('index.html'))

Затем сценарий проверяет, что переменные, определенные в шаблонах, находятся либо в настройках проекта, либо в диктовке, предоставленной пользователем в качестве тестового ввода.

/path/to/project/templates/templates/allusers.html
  -> ok: users, STATIC_URL
/path/to/project/templates/entrer-en-contact.html
  -> ok: contactform, STATIC_URL
/path/to/project/templates/dest-summary.html
  -> ok: STATIC_URL
  -> missing: dest_username

Подробнее в этом блоге .

2 голосов
/ 22 июня 2010

В качестве альтернативы, подход «по-вашему» для проверки страниц на вашем сайте во время обычного процесса модульного тестирования будет выглядеть примерно так:

  1. Просмотрите ваш urls.py и создайте столько возможных URL-адресов для сайта, сколько сможете
  2. Используйте встроенный тестовый клиент Django , чтобы получить каждый из этих URL
  3. Подтвердите их (см., Возможно, Проверьте (X) HTML в Python )

Не уверен, что кто-то выполнил какую-либо работу по этому способу многократного использования.

...