Django:测试成功加载静态文件

时间:2012-12-05 11:26:59

标签: python django automated-tests django-testing

是否可以在Django自动测试中测试成功加载静态页面组件?

例如,使用django测试客户端,除了将client.get('x').status_code测试为200之外,我还想测试是否所有页面的静态资源(链接的css和js文件)都已成功加载。

如果使用client无法实现,是否有插件或补充测试系统,例如硒,能够进行这种类型的测试吗?

2 个答案:

答案 0 :(得分:5)

我想你想知道django的静态文件查找器能否找到你的静态资源。

请考虑您的应用名称为my_app。你里面有一个名为static的文件夹。你再次在其中有一个名为my_app的文件夹,其中包含你的静态资源,让我们说一些名为'test.jpg'的图像。

myapp
|-- __init__.py 
`-- models.py
`-- static
    `-- myapp
        `-- test.jpg

from django.contrib.staticfiles import finders
from django.contrib.staticfiles.storage import staticfiles_storage

class TestStaticFiles(TestCase):
"""Check if app contains required static files"""
def test_images(self):
    abs_path = finders.find('myapp/test.jpg')
    self.assertTrue(staticfiles_storage.exists(abs_path))

finders查看所有应用的static/子目录,以查找静态资源。

答案 1 :(得分:1)

我发现自己遇到了一个非常类似的问题,虽然我想验证文件是否包含在页面中而不是检查它是否已加载,因为我选择性地包含它。

为此,我只使用assertContains检查:

def test_static_file_included(self):
    response = self.client.get(reverse('my-view'))
    self.assertContains(response, 'staticfilename.js')

请注意,staticfilename.js可以包含在页面的其他位置。

assertContains将检查响应status_code是否正常,然后检查搜索str是否包含在response.content中。