2

我在运行TestCases 时遇到问题,我在其中渲染页面模板以测试生成的 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>

作为参考,以下是这些文件的链接:

但是,这些行打破了我的测试。我收到这两个错误:

  • 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多次运行。

有任何想法吗?

谢谢!

4

1 回答 1

0

显然这是一个特性,而不是一个错误。在运行测试之前,我必须更改部署的运行方式collectstatic——这需要更改为我的持续集成环境定制的 .yml 配置文件——与上述任何内容完全无关。哦。

于 2018-03-27T14:47:30.040 回答