2

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>

参考までに、これらのファイルへのリンクを次に示します。

ただし、これらの行は私のテストを破るものです。次の 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から除外したエントリ)またはdjango-material. 実際、詳しく調べてみると、これらの 3 行を削除すると、その後の 'static' の呼び出しで中断されます (この例でも簡単にするために省略しています)。

さて、この StackOverflow questionのアドバイスに従って、collectstaticローカルで実行すると、この問題は解決されます。ただし、コードをデプロイしてリモートでテストを実行すると、そこで実行する方法がわかりませんcollectstatic。テストの基本クラスをStaticLiveServerTestCaseに変更しようとしましたが、違いはありませんでした。Nose のドキュメントから、テスト クラスでルーチンを作成できることもわかりますが、このようなテストをコード全体の多くのテスト クラスで実行することを考えると、複数回setUp()実行することは避けたいと考えています。collectstatic

何か案は?

ありがとう!

4

1 に答える 1