django manage.py test auth失败

时间:2009-07-06 18:14:39

标签: django testing authentication

当我运行django的测试套件时,我在auth应用程序上遇到错误。我(显然)没有写任何auth代码,我没有为auth编写测试。但是验证测试失败了。以下是我得到的一些错误,整个堆栈跟踪太大了,无法放在这里: 有人曾经处理过此事吗?

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...

1 个答案:

答案 0 :(得分:4)

我明白了。如果auth应用程序使用复杂的模板来呈现默认的auth模板视图,则会发生auth测试失败的测试。 auth应用程序使用您的应用程序使用的模板测试自身。我已将默认值更改为与我网站其余部分相同的模板。

我在模板中犯的错误:

  • 使用auth应用程序不知道的变量和反向URL。 在我的情况下,它是auth模板中的用户配置文件信息(当你没有登录时不可用)和坏的url反向标签,这导致auth app测试中的错误。

当我删除基本auth模板上无用的所有内容时,所有auth测试再次成功。

因此,我学到了另一个教训:

将模板中的内容和结构分开是很有用的。通过创建base.html模板文件很容易做到这一点,该文件仅定义基本的html页面结构并包含一堆内容块。请参阅下面的示例代码:

下一步是创建一个扩展base.html的base_content.html,并定义用于将内容呈现到页面中的内容块。每页都需要基本的简单内容。

在您的应用中,您扩展了base_content.html并填充剩余的空内容块或使用新内容块覆盖它们。 使用这种技术,可以很容易地创建扩展base_content.html的auth模板 或base.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测试成功进行聚合!