1

私はまったく新しい django プロジェクトを作成し、DATABASE_USER、DATABASE_ENGINE、DATABASE_NAME、および DATABASE_PASSWORD に値を指定する以外は文字通り何もしません。django 認証テストは失敗します。これはどのように可能ですか?

また、 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...
$ 

いったい何が足りないの?? 私はまだ何も悪いことをしていませんし、すでに失敗しています:)。

4

5 に答える 5

3

「manage.py test」のデフォルトのアクションは、にリストされているアプリケーションのすべてのテストを実行することINSTALLED_APPSですsettings.py。この場合、django の認証アプリケーションのテストを実行することになります。おそらく、テストをスムーズに実行するには、いくつかのデータ/フィクスチャを構成する必要があります。代わりに、「manage.py test MY_APP」というアプリケーションのみのテストを実行します。詳細については、テストの実行を参照してください。

更新: django にパッチを提供していない限り、独自のテストを実行するたびにこれらのテストを実行する必要があるかどうかはわかりません。しかし...何らかの理由でdjangoテストを実行したい場合、最も簡単な方法は次のとおりです(「ジャンク」プロジェクトを空のテンプレートとして使用します)。

  1. 「ジャンク」が PYTHONPATH にあり、設定の DB ユーザーに「データベースの作成」権限があることを確認してください。
  2. django の "tests" ディレクトリに移動します (ディストリビューションを解凍した後、これは最上位ディレクトリにあるはずです (例: "Django-1.2.1/tests")。
  3. タイプ:

    python runtests.py --settings=junk.settings 認証

    3.538 秒で 48 のテストを実行

    わかった

于 2010-07-17T18:38:00.407 に答える
1

サイトをセットアップしSITE_ID、設定で を に設定しました1か? SITE_IDが に設定されていないと、Django のテスト スイートが正しく動作しないことを思い出し1ます。

于 2010-07-17T18:49:45.293 に答える
1

TEMPLATE_DIRS で少なくとも 1 つのパスを指定する必要があります。原因はわかりませんが、バグかもしれません。詳しくは語らなかった…

于 2010-07-17T20:23:56.497 に答える
0

を実行する前に、PYTHONPATHとが設定されていることを確認してください。私は自分のプロジェクト ディレクトリに、実行したいときにソースとして使用できるスクリプトを作成するのが好きです。いえDJANGO_SETTINGS_MODULEmanage.py

# cat ./localenv
PYTHONPATH=...
DJANGO_SETTINGS_MODULE=...
# . ./localenv
# python ./manage.py ...
于 2010-07-17T18:51:46.583 に答える
0

したがって、私は同じことを取得し、django admin を INSTALLED_APPS に配置すると、失敗しなくなりました。なぜなら、admin モジュールには、テストで不平を言っていた不足しているテンプレートとハンドラーが付属しているためです。

したがって、私の提案は、django admin を INSTALLED_APPS のままにしておくことだと思いますが、urlconf でオンにしないでください。

于 2010-08-26T20:49:16.017 に答える