Отсутствует запись манифеста статических файлов при отображении шаблона в Django TestCases

У меня проблема с запуском TestCase s, в котором я отображаю шаблон страницы, чтобы протестировать созданные фрагменты HTML.

Вот пример теста, который я запускаю:

test.py

from django.test import TestCase

class NavTestCase(TestCase):
    def test_standard_user_nav(self):
        self.client.login(username='username', password='password')
        user = auth.get_user(self.client)
        response = self.client.get('/')
        content = response.render().content
        # Run logic to check pieces of the nav in the rendered HTML

requirements.txt

django-material==1.0.0
django-nose==1.4.5
nose==1.3.7

settings.py

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

Проблема с кодом, который я добавил в свой base.html файл для поддержки использования django-материала для недавнего редизайна сайта. Ниже три строки в <head> копируются прямо из django-material документация.

base.html

{% load static %}
<html lang="en-us">
<head>
    {% include 'material/includes/material_css.html' %}
    <script src="{% static '[material/js/jquery.js' %}"></script>
    {% include 'material/includes/material_js.html' %}
</head>
<body>...</body>
</html>

Для справки, вот ссылки на эти файлы:

Тем не менее, эти строки - то, что нарушает мои тесты. Я получаю эти две ошибки:

  • WARNING Exception raised while rendering {% include %} ... ValueError: Missing staticfiles manifest entry for 'material/fonts/material-design-icons/material-icons.css' ==> Это первый вызов в material_css.html.
  • ValueError: Missing staticfiles manifest entry for 'material/js/jquery.js' ==> Это вторая строка в base.html, определенная документами django-material.

У меня нет этой проблемы ни с какими другими статическими файлами, ни с теми, которые я создал (чьи записи я оставил в урезанном base.html, который я вставил выше), или даже, казалось бы, с другими, предоставленными django-material, На самом деле, при более внимательном рассмотрении, когда я удаляю эти три строки, он прерывается при последующих вызовах "static" (который, опять же, я упустил из этого примера для простоты).

Теперь, следуя совету этого вопроса Stackru, когда я запускаю collectstatic в местном масштабе, это действительно заботится об этой проблеме. Однако, когда я внедряю код и запускаю тесты удаленно, я не знаю, как получить collectstatic бежать туда. Я попытался изменить базовый класс моих тестов на StaticLiveServerTestCase, но это не имело значения. Я также вижу из документации по носу, что я мог бы создать setUp() в моем классе тестирования, но, учитывая, что я запускаю такие тесты во многих тестовых классах по всему коду, я хочу избежать запуска collectstatic многократно.

Есть идеи?

Спасибо!

1 ответ

Решение

Видимо, это была особенность, а не ошибка. Мне пришлось изменить способ развертывания, чтобы запустить collectstatic перед запуском тестов - это потребовало изменения файла конфигурации.yml, настроенного для моей среды непрерывной интеграции - совершенно не связанного ни с одним из вышеперечисленных. D'о.

Другие вопросы по тегам