2015-01-21 2 views
2

У меня есть изображение в папке media в корне моего проекта. Я могу ./manage.py runserver и получить доступ к моему файлу с помощью 127.0.0.1:8000/media/img.jpg url в браузере. Но следующий тест не с 404!=200. Зачем?Файл мультимедиа не найден с помощью self.client.get() в Python TestCase

class MyTestCase(TestCase): 
    def test_image_shows(self): 
     response = self.client.get('/media/img.jpg') 
     self.assertEquals(response.status_code, 200) 

settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
MEDIA_URL = '/media/' 

ответ

2

Это не просто и не элегантно, но это самый лучший простой способ я нашел для себя:

1) в вашем urls.pyAdd a static rule (он не включен в производство):

from django.conf import settings 
from django.conf.urls.static import static 

urlpatterns = [ 
    # ... the rest of your URLconf goes here ... 
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

2) Включить DEBUG для теста (так, что статическое правило получает включено):

from django.test import TestCase 
from django.test.utils import override_settings 

@override_settings(DEBUG=True) 
class SomeTestCase(TestCase): 
    def test_something(self): 
     assert self.client.get('/medias/something.jpg').status_code == 200 

Вы также можете указать другой MEDIA_ROOT для испытаний, чтобы не загрязнить Dev MEDIA_ROOT, если вы пишете Medias во время вашего тесты. Пример можно найти: on caktus blog.