./manage.py test
を使用してテストを実行すると、print
を介して標準出力に送信したものは何も表示されません。テストが失敗すると、失敗したテストごとに「stdout」ブロックが表示されるので、Djangoはそれをトラップします(ただし、テストが成功しても表示されません)。
TEST_RUNNER
のsettings.py
を確認しました。これは、Noseを呼び出すプロジェクト固有のランナーを使用しています。 Noseにはstdout
のキャプチャを停止する-s
オプションがありますが、実行すると:
./manage.py test -s
manage.py
は最初にそれをキャプチャし、「no such option」エラーをスローします。 manage.py
のヘルプではこれについて言及していませんが、実行すると次のことがわかりました。
./manage.py test -- -s
-s
を無視し、カスタムランナー側でキャプチャして、問題なくNoseに渡します。
ええ、この問題はNoseTestSuiteRunner
が原因です。 -- -s
の追加は注意が必要であり、最善の解決策ではありません。 settings.py
に次の行を追加してみてください:
NOSE_ARGS = ['--nocapture',
'--nologcapture',]
これは私の問題を解決しました。
関連するすべてのパッケージ(Django==1.11.2
、Django-nose==1.4.5
、nose==1.3.7
)の現在のバージョンを使用すると、テストの実行時に--nocapture
フラグを追加するだけで十分です。したがって、単純な
./manage.py test --nocapture
十分であろう。
もちろんあります
TEST_RUNNER = "Django_nose.NoseTestSuiteRunner"
settings.py
おそらく、Noseなどの中間テストランナーがあり、stdoutをインターセプトして保存しています。 Djangoテストを直接実行するか、代わりにstderrに書き込みます。