Отсутствует запись манифеста статических файлов при отображении шаблона в 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>
Для справки, вот ссылки на эти файлы:
- https://github.com/viewflow/django-material/blob/master/material/templates/material/includes/material_css.html
- https://github.com/viewflow/django-material/tree/master/material/static/material/js
- https://github.com/viewflow/django-material/blob/master/material/templates/material/includes/material_js.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, который я вставил выше), или даже, казалось бы, с другими, предоставленными На самом деле, при более внимательном рассмотрении, когда я удаляю эти три строки, он прерывается при последующих вызовах "static" (который, опять же, я упустил из этого примера для простоты).django-material
,
Теперь, следуя совету этого вопроса Stackru, когда я запускаю collectstatic
в местном масштабе, это действительно заботится об этой проблеме. Однако, когда я внедряю код и запускаю тесты удаленно, я не знаю, как получить collectstatic
бежать туда. Я попытался изменить базовый класс моих тестов на StaticLiveServerTestCase, но это не имело значения. Я также вижу из документации по носу, что я мог бы создать setUp()
в моем классе тестирования, но, учитывая, что я запускаю такие тесты во многих тестовых классах по всему коду, я хочу избежать запуска collectstatic
многократно.
Есть идеи?
Спасибо!
1 ответ
Видимо, это была особенность, а не ошибка. Мне пришлось изменить способ развертывания, чтобы запустить collectstatic
перед запуском тестов - это потребовало изменения файла конфигурации.yml, настроенного для моей среды непрерывной интеграции - совершенно не связанного ни с одним из вышеперечисленных. D'о.