2017-02-24 8 views
1

私は最近、ステージング環境にいくつかの壊れたコードを配備しました。新しいコードはDjango's system checksで失敗しました(この問題はより一般的ですが、以下のエラーメッセージが再現されています)。私たちのユニットテストスイートはきれいに走った。私の質問はこれです:コードを展開する前にシステムチェックを確実に実行するための正しい方法は何ですか?ユニットテストスイートにDjangoのシステムチェックを組み込む?

最初は、Djangoのテストランナーの代わりにpytestを使用しているため、システムチェックを実行せずにテストを実行できたと推測しました。しかし、簡単なテストを追加してmanage.py testを呼び出すと、Djangoテストランナーはシステムチェックを実行せずに実行されることが示されました。

ビルドパイプラインでmanage.py checkコマンドを実行し、ゼロ以外の戻り値でビルドに失敗することを考えました。このアプローチの欠点は、コードをコミットする前に別の開発者のステップを導入することです(ユニットテストスイートの実行に加えてmanage.py checkを実行するなど)。

もう1つのアイデアは、システムチェックを実行する単体テストを追加することです。これは技術的に実現可能なようですが、Djangoのシステムチェックフレームワークの目的と設計と一貫していますか?

私は、the documentationには私が求めているところではうまくいかないカスタムチェックのためのテストを書くためのセクションがあることに注意してください。私はDjangoのドキュメントのテストにシステムチェックを組み込むことに関する他のドキュメントは見ていません。

エラーメッセージ:

SystemCheckError: System check identified some issues: 

ERRORS: 
myapp.MyCoolModel.linked_groups: (fields.E304) Reverse accessor for 'MyCoolModel.linked_groups' clashes with reverse accessor for 'MyCoolModel.primary_group'. 
    HINT: Add or change a related_name argument to the definition for 'MyCoolModel.linked_groups' or 'MyCoolModel.primary_group'. 
myapp.MyCoolModel.primary_group: (fields.E304) Reverse accessor for 'MyCoolModel.primary_group' clashes with reverse accessor for 'MyCoolModel.linked_groups'. 
    HINT: Add or change a related_name argument to the definition for 'MyCoolModel.primary_group' or 'MyCoolModel.linked_groups'. 

答えて

1

this ticketによると、テストと一緒にチェックを実行していないことは、バージョン1.8で導入された回帰し、最近修正されました。

そこに記載されているように、簡単な解決策はrun_suite()の先頭にcall_command('check')を挿入する独自のtest runnerを作成することです。例については、actual fixを参照してください。

関連する問題