Django: тестирование статических файлов
Используя платформу тестирования (TestCase) Django 1.3, я хотел бы запустить некоторые тесты на статические файлы (т.е. файлы, которые не обязательно обслуживаются самим django на prod, но которые могут быть отправлены для отладки (runerver)).
Но если я запустил
self.client.get("/static/somefile.json")
... Я получаю ошибку 404 в моих тестах. (конечно, этот файл доступен на сервере-сервере)
Почему бы и нет, но что было бы самым лучшим способом проверить наличие этой json-схемы в моих статических файлах? (в моем случае я также хотел бы протестировать эту публичную схему json против сгенерированного вывода json, поэтому я хочу содержимое файла)
Ответы
Ответ 1
Другой метод, который я нахожу немного проще, чем меньше для типа/импорта:
from django.contrib.staticfiles import finders
result = finders.find('css/base.css')
Если статический файл был найден, он вернет полный путь к файлу. Если он не найден, он вернет None
Источник: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#finders-module
Как и в Django 1.7+, вы также можете узнать/проверить, где Django просматривает модуль finders:
searched_locations = finders.searched_locations
В дополнение к утверждению SimpleTestCase.assertTemplateUsed(response, template_name, msg_prefix='')
, предоставленному Django, вы также можете использовать:
response.templates
из класса Response, чтобы получить список шаблонов, которые использовались для отображения ответа.
Источник: https://docs.djangoproject.com/en/dev/topics/testing/tools/#django.test.Response.templates
Ответ 2
как насчет этого:
from django.contrib.staticfiles import finders
from django.contrib.staticfiles.storage import staticfiles_storage
absolute_path = finders.find('somefile.json')
assert staticfiles_storage.exists(absolute_path)
Это использует поиск статических файлов для поиска файла с именем "somefile.json", а затем проверяет, действительно ли файл существует на настроенном хранилище?
Ответ 3
Вы можете использовать класс testing.StaticLiveServerTestCase
из модуля staticfiles:
http://django.readthedocs.org/en/latest/ref/contrib/staticfiles.html#specialized-test-case-to-support-live-testing
Ответ 4
Это для обслуживания статических файлов ТОЛЬКО во время разработки:
https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#static-file-development-view
Ответ 5
Как и комментарии isbadawi, тестовый сервер всегда работает с DEBUG = False
. Таким образом, вы не можете полагаться на обработку DEBUG статических файлов, вам нужен явный способ обработки, чтобы обработать их для теста, чтобы найти их. У вас может быть специальный раздел в urls.py
, который включает разработку serve()
для запуска test
:
if 'test' in sys.argv:
static_url = re.escape(settings.STATIC_URL.lstrip('/'))
urlpatterns += patterns('',
url(r'^%s(?P<path>.*)$' % static_url, 'django.views.static.serve', {
'document_root': settings.STATIC_ROOT,
}),
)