同様の問題に遭遇しました。ただし、設定
STATICFILES_STORAGE='pipeline.storage.NonPackagingPipelineStorage'
テストを実行すると、問題が部分的にしか解決しませんでした。また、テストを実行する前に「collecstatic」を呼び出さずに LiverServerTestCase テストを実行する場合は、パイプラインを完全に無効にする必要がありました。
PIPELINE_ENABLED=False
django 1.4 以降、テストの設定を変更するのは非常に簡単です。メソッドまたは TestCase クラスに対して機能する便利なデコレータがあります。
https://docs.djangoproject.com/en/1.6/topics/testing/tools/#overriding-settings
例えば
from django.test.utils import override_settings
@override_settings(STATICFILES_STORAGE='pipeline.storage.NonPackagingPipelineStorage', PIPELINE_ENABLED=False)
class BaseTestCase(LiveServerTestCase):
"""
A base test case for Selenium
"""
def setUp(self):
...
ただし、@jrothenbuhlerが彼の回答で説明しているように、これは一貫性のない結果をもたらしました。とにかく、統合テストを実行している場合、これは理想的とは言えません。潜在的な問題を検出するために、可能な限り本番環境を模倣する必要があります。django 1.7には、新しいテストケース「StaticLiveServerTestCase」の形でこれに対する解決策があるようです。ドキュメントから:
https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#django.contrib.staticfiles.testing.StaticLiveServerCase
この unittest TestCase サブクラスは、django.test.LiveServerTestCase を拡張します。
親と同じように、テスト対象のコードを実行し、HTTP (Selenium、PhantomJS など) を介してテスト ツールで使用することを含むテストを作成するために使用できます。そのため、静的アセットも公開する必要があります。
私はこれをテストしていませんが、有望に思えます。今のところ、collectstatic を実行する必要のないカスタム テスト ランナーを使用して、彼のソリューションで @jrothenbuhler が行っていることを行っています。本当に、本当に collectstatic を実行したい場合は、次のようにすることができます。
from django.conf import settings
from django.test.simple import DjangoTestSuiteRunner
from django.core.management import call_command
class CustomTestRunner(DjangoTestSuiteRunner):
"""
Custom test runner to get around pipeline and static file issues
"""
def setup_test_environment(self):
super(CustomTestRunner, self).setup_test_environment()
settings.STATICFILES_STORAGE = 'pipeline.storage.NonPackagingPipelineStorage'
call_command('collectstatic', interactive=False)
settings.py で
TEST_RUNNER = 'path.to.CustomTestRunner'