2009-07-06 120 views
2

當我運行django的測試套件時,我在auth應用程序上收到錯誤。我有(顯然)沒有寫任何授權代碼,我沒有寫驗證測試。但驗證測試失敗。以下是我得到的一些錯誤,整個堆棧跟蹤太大而不能放在這裏: 以前有人處理過這個問題嗎?django manage.py測試認證失敗

AttributeError: 'module' object has no attribute 'handler500' 

DoesNotExist: UserProfile matching query does not exist. 

---------------------------------------------------------------------- 
Ran 30 tests in 3.813s 

FAILED (errors=17) 
Destroying test database... 

回答

4

我想通了。如果身份驗證應用程序使用複雜模板呈現默認身份驗證模板視圖,則會發生身份驗證測試中失敗的測試。 auth應用程序使用您的應用程序使用的模板測試自己。我已將默認設置更改爲與我的網站其他部分相同的模板。

我在模板中犯的錯誤:

  • 變量的使用和反向未通過身份驗證的應用程序稱爲網址。 在我的情況下,它在auth模板中的用戶配置文件信息(當你沒有登錄當地時不可用)和在auth應用程序測試中導致錯誤的不良URL反向標記。

當我放棄了基本認證模板上無用的所有內容時,所有認證測試都再次成功。因爲這個

我學到了一課:

它是有用的在你的模板分離內容和結構。這很容易通過創建一個base.html模板文件,它只定義了一個基本的HTML頁面結構幷包含一堆內容塊。請參閱下面的示例代碼:

下一步是創建一個base_content.html,它將擴展base.html並僅定義內容用於將內容呈現到頁面中的塊。每個頁面都需要基本簡單的內容。

在您的應用程序,你延長base_content.html和填充剩餘的空的內容塊或用新的替代他們.. 利用該技術,很容易創造出延長base_content.html 或基地AUTH模板。 html的非常基本的認證模板,所以大部分(無用的)內容都被忽略了。

例如base.html文件

<body> 
<div id="header"> 
{% block mainmenu %}{% endblock %} 
</div> 
<div id="userbar"> 
{% block userbar %}{% endblock %} 
</div> 
<div id="bigcontent"> 
    {% block bigcontent %}{% endblock %} 
</div> 
</body> 

例如base.content

{% extends "base.html" %} 
    {% load i18n %} 
    {% block mainmenu %} 
     ...content.. 
    {% endblock %} 

現在,在我的應用模板擴展,其具有在每個頁面上顯示的內容基本內容模板。 這種方式你不會重複自己,你的模板代碼變得非常乾燥,只需使用base.content模板auth視圖將使auth測試成功aggain!