Django: тестирование статических файлов - PullRequest
17 голосов
/ 19 августа 2011

Используя среду тестирования (TestCase) из Django 1.3, я хотел бы запустить некоторые тесты для статических файлов (т. Е. Файлов, которые не обязательно обслуживаются самим django в prod, но могут быть использованы для отладки (runserver)).Но если я запускаю

self.client.get("/static/somefile.json")

... я получаю ошибку 404 в моих тестах.(конечно, этот файл доступен на runserver)

Почему бы и нет, но как лучше всего проверить наличие этой схемы json в моих статических файлах?(в моем случае я также хотел бы проверить эту общедоступную схему json на основе сгенерированного вывода json, поэтому я хочу содержимое файла)

Ответы [ 5 ]

9 голосов
/ 05 апреля 2014

Другой метод, который я нахожу немного проще, так как меньше набирать / импортировать:

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 просматривает искателиmodule:

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

8 голосов
/ 17 ноября 2011

как насчет этого:

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)

При этом средства поиска staticfiles находят файл с именем 'somefile.json', а затем проверяют, существует ли этот файл в настроенном вами хранилище?

5 голосов
/ 23 июня 2015

Вы можете использовать класс testing.StaticLiveServerTestCase из модуля staticfiles: http://django.readthedocs.org/en/latest/ref/contrib/staticfiles.html#specialized-test-case-to-support-live-testing

2 голосов
/ 05 апреля 2013

Как отмечает 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,
        }),
    )
2 голосов
/ 09 мая 2012

Это для обслуживания статических файлов ТОЛЬКО во время разработки: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#static-file-development-view

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...