2009-07-06 122 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!