2017-02-24 33 views
1

我最近在暫存環境中部署了一些破損的代碼。新代碼失敗Django's system checks(以下錯誤消息轉載,雖然這個問題更一般)。我們的單元測試套件乾淨地運行。我的問題是:在部署代碼之前,確保系統檢查運行的正確方法是什麼?將Django的系統檢入到單元測試套件中?

最初我猜測測試能夠在不執行系統檢查的情況下運行,因爲我們使用pytest而不是Django的測試運行器。但是,添加一個簡單的測試並調用manage.py test表明Django測試運行器也運行時未執行系統檢查。

我的一個想法是在我們的構建管道中運行manage.py check命令,並且在構建時返回非零值。這種方法的缺點是它會在代碼被提交之前引入另一個開發人員步驟(例如,除了運行單元測試套件外,還記得運行manage.py check)。

另一個想法是添加一個運行系統檢查的單元測試。這在技術上似乎是可行的,但是它與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版本中引入的,並在最近被修復迴歸。

如上所述,一個簡單的解決方案似乎是創建您自己的test runner,它在run_suite()的開頭插入call_command('check')。示例請參閱actual fix