在一个全新的django项目中,django auth测试失败了

时间:2010-07-17 18:29:46

标签: django django-testing django-authentication

我创建了一个全新的django项目,除了为DATABASE_USER,DATABASE_ENGINE,DATABASE_NAME和DATABASE_PASSWORD提供值以及django auth测试失败之外,几乎没有任何内容。这怎么可能呢?

我也尝试按django: failing tests from django.contrib.auth

的建议添加TEMPLATE_CONTEXT_PROCESSORS

以下是我输入的内容:

$ django-admin --version
1.1.1
$ python --version
Python 2.5.5
$ django-admin startproject junk
$ cd junk
$ vim settings.py #edit DATABASE_USER, DATABASE_ENGINE, DATABASE_NAME,DATABASE_PASSWORD
$ ./manage.py test
Creating test database...
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Installing index for auth.Permission model
Installing index for auth.Message model
EE..E...EEEEEEE..................
======================================================================
ERROR: test_password_change_fails_with_invalid_old_password (django.contrib.auth.tests.views.ChangePasswordTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 156, in test_password_change_fails_with_invalid_old_password
    'new_password2': 'password1',
  File "/usr/lib/pymodules/python2.5/django/test/client.py", line 313, in post
    response = self.request(**r)
  File "/usr/lib/pymodules/python2.5/django/core/handlers/base.py", line 92, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/decorators.py", line 78, in __call__
    return self.view_func(request, *args, **kwargs)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/views.py", line 160, in password_change
    }, context_instance=RequestContext(request))
  File "/usr/lib/pymodules/python2.5/django/shortcuts/__init__.py", line 20, in render_to_response
    return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 103, in render_to_string
    t = get_template(template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 81, in get_template
    source, origin = find_template_source(template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 74, in find_template_source
    raise TemplateDoesNotExist, name
TemplateDoesNotExist: registration/password_change_form.html

======================================================================
ERROR: test_password_change_fails_with_mismatched_passwords (django.contrib.auth.tests.views.ChangePasswordTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 167, in test_password_change_fails_with_mismatched_passwords
    'new_password2': 'donuts',
  File "/usr/lib/pymodules/python2.5/django/test/client.py", line 313, in post
    response = self.request(**r)
  File "/usr/lib/pymodules/python2.5/django/core/handlers/base.py", line 92, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/decorators.py", line 78, in __call__
    return self.view_func(request, *args, **kwargs)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/views.py", line 160, in password_change
    }, context_instance=RequestContext(request))
  File "/usr/lib/pymodules/python2.5/django/shortcuts/__init__.py", line 20, in render_to_response
    return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 103, in render_to_string
    t = get_template(template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 81, in get_template
    source, origin = find_template_source(template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 74, in find_template_source
    raise TemplateDoesNotExist, name
TemplateDoesNotExist: registration/password_change_form.html

======================================================================
ERROR: Logout without next_page option renders the default template
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 216, in test_logout_default
    response = self.client.get('/logout/')
  File "/usr/lib/pymodules/python2.5/django/test/client.py", line 281, in get
    response = self.request(**r)
  File "/usr/lib/pymodules/python2.5/django/test/client.py", line 225, in request
    response = self.handler(environ)
  File "/usr/lib/pymodules/python2.5/django/test/client.py", line 69, in __call__
    response = self.get_response(request)
  File "/usr/lib/pymodules/python2.5/django/core/handlers/base.py", line 134, in get_response
    return self.handle_uncaught_exception(request, resolver, exc_info)
  File "/usr/lib/pymodules/python2.5/django/core/handlers/base.py", line 165, in handle_uncaught_exception
    callback, param_dict = resolver.resolve500()
  File "/usr/lib/pymodules/python2.5/django/core/urlresolvers.py", line 266, in resolve500
    return self._resolve_special('500')
  File "/usr/lib/pymodules/python2.5/django/core/urlresolvers.py", line 255, in _resolve_special
    callback = getattr(self.urlconf_module, 'handler%s' % view_type)
AttributeError: 'module' object has no attribute 'handler500'

======================================================================
ERROR: test_confirm_complete (django.contrib.auth.tests.views.PasswordResetTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 107, in test_confirm_complete
    url, path = self._test_confirm_start()
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 67, in _test_confirm_start
    response = self.client.post('/password_reset/', {'email': 'staffmember@example.com'})
  File "/usr/lib/pymodules/python2.5/django/test/client.py", line 313, in post
    response = self.request(**r)
  File "/usr/lib/pymodules/python2.5/django/core/handlers/base.py", line 92, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/views.py", line 99, in password_reset
    form.save(**opts)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/forms.py", line 125, in save
    t = loader.get_template(email_template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 81, in get_template
    source, origin = find_template_source(template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 74, in find_template_source
    raise TemplateDoesNotExist, name
TemplateDoesNotExist: registration/password_reset_email.html

======================================================================
ERROR: test_confirm_different_passwords (django.contrib.auth.tests.views.PasswordResetTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 122, in test_confirm_different_passwords
    url, path = self._test_confirm_start()
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 67, in _test_confirm_start
    response = self.client.post('/password_reset/', {'email': 'staffmember@example.com'})
  File "/usr/lib/pymodules/python2.5/django/test/client.py", line 313, in post
    response = self.request(**r)
  File "/usr/lib/pymodules/python2.5/django/core/handlers/base.py", line 92, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/views.py", line 99, in password_reset
    form.save(**opts)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/forms.py", line 125, in save
    t = loader.get_template(email_template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 81, in get_template
    source, origin = find_template_source(template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 74, in find_template_source
    raise TemplateDoesNotExist, name
TemplateDoesNotExist: registration/password_reset_email.html

======================================================================
ERROR: test_confirm_invalid (django.contrib.auth.tests.views.PasswordResetTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 85, in test_confirm_invalid
    url, path = self._test_confirm_start()
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 67, in _test_confirm_start
    response = self.client.post('/password_reset/', {'email': 'staffmember@example.com'})
  File "/usr/lib/pymodules/python2.5/django/test/client.py", line 313, in post
    response = self.request(**r)
  File "/usr/lib/pymodules/python2.5/django/core/handlers/base.py", line 92, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/views.py", line 99, in password_reset
    form.save(**opts)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/forms.py", line 125, in save
    t = loader.get_template(email_template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 81, in get_template
    source, origin = find_template_source(template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 74, in find_template_source
    raise TemplateDoesNotExist, name
TemplateDoesNotExist: registration/password_reset_email.html

======================================================================
ERROR: test_confirm_invalid_post (django.contrib.auth.tests.views.PasswordResetTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 97, in test_confirm_invalid_post
    url, path = self._test_confirm_start()
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 67, in _test_confirm_start
    response = self.client.post('/password_reset/', {'email': 'staffmember@example.com'})
  File "/usr/lib/pymodules/python2.5/django/test/client.py", line 313, in post
    response = self.request(**r)
  File "/usr/lib/pymodules/python2.5/django/core/handlers/base.py", line 92, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/views.py", line 99, in password_reset
    form.save(**opts)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/forms.py", line 125, in save
    t = loader.get_template(email_template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 81, in get_template
    source, origin = find_template_source(template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 74, in find_template_source
    raise TemplateDoesNotExist, name
TemplateDoesNotExist: registration/password_reset_email.html

======================================================================
ERROR: test_confirm_valid (django.contrib.auth.tests.views.PasswordResetTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 78, in test_confirm_valid
    url, path = self._test_confirm_start()
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 67, in _test_confirm_start
    response = self.client.post('/password_reset/', {'email': 'staffmember@example.com'})
  File "/usr/lib/pymodules/python2.5/django/test/client.py", line 313, in post
    response = self.request(**r)
  File "/usr/lib/pymodules/python2.5/django/core/handlers/base.py", line 92, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/views.py", line 99, in password_reset
    form.save(**opts)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/forms.py", line 125, in save
    t = loader.get_template(email_template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 81, in get_template
    source, origin = find_template_source(template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 74, in find_template_source
    raise TemplateDoesNotExist, name
TemplateDoesNotExist: registration/password_reset_email.html

======================================================================
ERROR: Email is sent if a valid email address is provided for password reset
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 60, in test_email_found
    response = self.client.post('/password_reset/', {'email': 'staffmember@example.com'})
  File "/usr/lib/pymodules/python2.5/django/test/client.py", line 313, in post
    response = self.request(**r)
  File "/usr/lib/pymodules/python2.5/django/core/handlers/base.py", line 92, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/views.py", line 99, in password_reset
    form.save(**opts)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/forms.py", line 125, in save
    t = loader.get_template(email_template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 81, in get_template
    source, origin = find_template_source(template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 74, in find_template_source
    raise TemplateDoesNotExist, name
TemplateDoesNotExist: registration/password_reset_email.html

======================================================================
ERROR: Error is raised if the provided email address isn't currently registered
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/tests/views.py", line 52, in test_email_not_found
    response = self.client.get('/password_reset/')
  File "/usr/lib/pymodules/python2.5/django/test/client.py", line 281, in get
    response = self.request(**r)
  File "/usr/lib/pymodules/python2.5/django/core/handlers/base.py", line 92, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib/pymodules/python2.5/django/contrib/auth/views.py", line 105, in password_reset
    }, context_instance=RequestContext(request))
  File "/usr/lib/pymodules/python2.5/django/shortcuts/__init__.py", line 20, in render_to_response
    return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 103, in render_to_string
    t = get_template(template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 81, in get_template
    source, origin = find_template_source(template_name)
  File "/usr/lib/pymodules/python2.5/django/template/loader.py", line 74, in find_template_source
    raise TemplateDoesNotExist, name
TemplateDoesNotExist: registration/password_reset_form.html

----------------------------------------------------------------------
Ran 33 tests in 3.696s

FAILED (errors=10)
Destroying test database...
$ 

我到底发生了什么?我甚至没有做错任何事情,我已经失败了:)。

5 个答案:

答案 0 :(得分:3)

“manage.py test”的默认操作是对INSTALLED_APPSsettings.py中列出的应用程序运行所有测试。在这种情况下,您最终会运行django的auth应用程序的测试。据推测,他们需要一些数据/装置,以便测试顺利运行。你想要做的只是为你的应用程序运行测试:“manage.py test MY_APP”。有关详细信息,请参阅Running Tests

更新:除非您为django提供补丁,否则我不确定每次运行自己的测试都需要运行这些测试。但是......如果您想运行django测试,无论出于何种原因,最简单的方法是以下(我将使用您的“垃圾”项目作为空白模板)。

  1. 确保PYTHONPATH中有“垃圾”,并且设置中的数据库用户具有“创建数据库”权限。
  2. 转到django中的“tests”目录(解压缩后,应该在顶级目录中,例如“Django-1.2.1 / tests”。
  3. 输入:

      

    python runtests.py --settings = junk.settings auth

    在3.538s中进行48次测试

    确定

答案 1 :(得分:1)

您是否设置了自己的网站并将设置中的SITE_ID设置为1?我记得如果SITE_ID未设置为1,则Django的测试套件无法正常工作。

答案 2 :(得分:1)

您必须在TEMPLATE_DIRS中指定至少一个路径,然后才能正常工作。我不知道它的原因,也许是一个bug。我没详细说明......

答案 3 :(得分:0)

确保在运行PYTHONPATH之前设置了DJANGO_SETTINGS_MODULEmanage.py。我喜欢在我的项目目录中创建一个脚本,当我想运行时,我可以提供该脚本。即。

# cat ./localenv
PYTHONPATH=...
DJANGO_SETTINGS_MODULE=...
# . ./localenv
# python ./manage.py ...

答案 4 :(得分:0)

所以我得到同样的东西,当我把django admin放在INSTALLED_APPS中时,它不再失败,因为管理模块带有测试所抱怨的缺少的模板和处理程序。

所以我想我的建议是将django admin留在INSTALLED_APPS中,但不要在urlconf中打开它。