エラーの原因と回避方法は「[Django]DjangoのテストをDEBUG=Trueで実行する」と同じです。状況が少し違ったので、新たな記事を書くことにしました。
エラーが起きた状況
Django 2.0 での開発中、manage.py test myapp
を実行したところ、静的ファイルが見つからずにエラーになってしまいました。
$ python manage.py test my_app
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
(snip)
File "/usr/local/lib/python3.6/site-packages/django/contrib/staticfiles/storage.py", line 422, in stored_name
raise ValueError("Missing staticfiles manifest entry for '%s'" % clean_name)
ValueError: Missing staticfiles manifest entry for 'my_app/css/default.css'
----------------------------------------------------------------------
Ran 1 test in 0.949s
FAILED (errors=1)
Destroying test database for alias 'default'...
settings.py では DEBUG=True
を指定しており、ブラウザ上では該当の CSS ファイルが正しく参照できているので、最初は原因がわかりませんでした。
エラーの原因
エラーの原因は、settings.py で DEBUG=True
が指定されていても manage.py test
すると DEBUG=False
とみなされてテストが実行されるためでした。
DEBUG=False
で実行されても静的ファイルが見つかるように manage.py collectstatic
すればよいのですが、まだ開発中のため避けたいところです。
エラーの回避方法
Django 1.11 から追加された --debug-mode
オプション を指定すれば、DEBUG=True
が指定されたものとして実行されます。
$ python manage.py test --debug-mode my_app
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 1.501s
OK
Destroying test database for alias 'default'...
チケット #27008 で、このオプションの追加が議論されていました。