TestCase
生成された HTML の一部をテストするために、ページのテンプレートをレンダリングしている s の実行で問題が発生しています。
私が実行している種類のテストの例を次に示します。
test.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'
問題は、サイトの最近の再設計でdjango-materialbase.html
の使用をサポートするためにファイルに追加したコードにあります。以下の 3 行は、ドキュメントから直接コピーしたものです。<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
ただし、これらの行は私のテストを破るものです。次の 2 つのエラーが発生します。
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 の 2 行目です。
私が作成した他の静的ファイル(上に貼り付けたトリミングされたbase.htmlから除外したエントリ)または 実際、詳しく調べてみると、これらの 3 行を削除すると、その後の 'static' の呼び出しで中断されます (この例でも簡単にするために省略しています)。django-material
.
さて、この StackOverflow questionのアドバイスに従って、collectstatic
ローカルで実行すると、この問題は解決されます。ただし、コードをデプロイしてリモートでテストを実行すると、そこで実行する方法がわかりませんcollectstatic
。テストの基本クラスをStaticLiveServerTestCaseに変更しようとしましたが、違いはありませんでした。Nose のドキュメントから、テスト クラスでルーチンを作成できることもわかりますが、このようなテストをコード全体の多くのテスト クラスで実行することを考えると、複数回setUp()
実行することは避けたいと考えています。collectstatic
何か案は?
ありがとう!