我在运行TestCase
s 时遇到问题,我在其中渲染页面模板以测试生成的 HTML 片段。
这是我正在运行的测试类型的示例:
测试.py
from django.test import TestCase
class NavTestCase(TestCase):
def test_standard_user_nav(self):
self.client.login(username='username', password='password')
user = auth.get_user(self.client)
response = self.client.get('/')
content = response.render().content
# Run logic to check pieces of the nav in the rendered HTML
要求.txt
django-material==1.0.0
django-nose==1.4.5
nose==1.3.7
设置.py
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
问题在于我添加到base.html
文件中以支持使用django-material来重新设计网站的代码。下面,中的三行<head>
是直接从django-material
文档中复制而来的。
base.html
{% load static %}
<html lang="en-us">
<head>
{% include 'material/includes/material_css.html' %}
<script src="{% static '[material/js/jquery.js' %}"></script>
{% include 'material/includes/material_js.html' %}
</head>
<body>...</body>
</html>
作为参考,以下是这些文件的链接:
- https://github.com/viewflow/django-material/blob/master/material/templates/material/includes/material_css.html
- https://github.com/viewflow/django-material/tree/master/material/static/material/js
- https://github.com/viewflow/django-material/blob/master/material/templates/material/includes/material_js.html
但是,这些行打破了我的测试。我收到这两个错误:
WARNING Exception raised while rendering {% include %} ... ValueError: Missing staticfiles manifest entry for 'material/fonts/material-design-icons/material-icons.css'
==> 这是 material_css.html 中的第一个调用。ValueError: Missing staticfiles manifest entry for 'material/js/jquery.js'
==> 这是 django-material 文档指定的 base.html 中的第二行。
我对任何其他静态文件都没有这个问题,无论是我创建的那些(我在上面粘贴的精简 base.html 中遗漏了这些文件),甚至看起来是由 实际上,经过仔细检查,当我删除这三行时,它会在随后对“静态”的调用中中断(为了简单起见,我再次从这个例子中省略了)。django-material
.
现在,按照这个 StackOverflow question的建议,当我在collectstatic
本地运行时,它确实解决了这个问题。但是,当我部署代码并远程运行测试时,我不知道如何在那里collectstatic
运行。我尝试将测试的基类更改为StaticLiveServerTestCase,但这并没有什么不同。我还从Nose 文档中看到,我可以在我的测试类中创建一个setUp()
例程,但鉴于我在我的代码中的许多测试类中运行这样的测试,我想避免collectstatic
多次运行。
有任何想法吗?
谢谢!