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", а затем проверяет, действительно ли файл существует на настроенном хранилище?

Ответ 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,
        }),
    )