使用Python TestCase中的self.client.get()找不到媒体文件

时间:2015-01-21 18:07:28

标签: python django django-testing

我的项目根目录中的media文件夹中有一个图像。我可以./manage.py runserver在浏览器中通过127.0.0.1:8000/media/img.jpg网址成功访问我的文件。但是以下测试失败了404!=200。为什么呢?

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/'

1 个答案:

答案 0 :(得分:2)

这不是直截了当也不优雅,但这是我为自己找到的最简单的方法:

你的 urls.py 中的

1)Add 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以免污染您的开发MEDIA_ROOT。可以找到一个示例on caktus blog