2

シェルを使用して、これを行うことができます:

>>> from django.test.client import Client
>>> from django.test.utils import setup_test_environment
>>> setup_test_environment()
>>> c = Client()
>>> c.login(username="dev", password="password")
True
>>> r = c.get('/')
>>> r.status_code
200

これをtest.pyファイルに追加します。

from django.test.client import Client

__test__ = {"doctest": """
>>> c = Client()
>>> c.login(username='dev', password='password')
True
>>> r = c.get('/')
>>> r.status_code
200
"""}

私はこの出力を取得します:

Failed example:
    c.login(username="dev", password="password")
Expected:
    True
Got:
    False
------------------------------------------------------
Failed example:
    r.status_code
Expected:
    200
Got:
    302

私はインターネット全体を見てきましたが、この状況に役立つものは何も見つかりません。何か案は?

同様のメモで、私はコメントアウトしました: djangoを実行するたびに文句を言うので、コードからfrom django.views.decorators.debug import sensitive_post_parametersすべてのデコレータ: このデコレータとインポートステートメントを削除すると、前に進むことができます。@sensitive_post_parameters()./manage.py test app
Could not import app.views. Error was: No module named debug

私は非常に失われました、そして私はStackOverflowが必要です!みんな、ありがとう。

4

1 に答える 1

2

sensitive_post_parametersはDjango1.4の新機能であるため、Django 1.3以前を実行している場合、インポートは失敗します。

シェルで試したコマンドは通常のデータベースで実行されたと思います。ドキュメントテストを実行すると、Djangoはテストデータベースをセットアップします。devドキュメントテストを実行すると、ユーザーがテストデータベースに存在しないように見えるため、ログインの試行は失敗します。1つのオプションはUser.objects.create_user、ログインを試みる前にでユーザーを作成することです。別のオプションは、器具を使用することです。

Djangoでは、ドキュメントテストの代わりに単体テストを作成することをお勧めします。大きな利点の1つは、初期データ(ユーザーなど)をテストデータベースにロードするためのフィクスチャを簡単に含めることができることです。もう1つは、Djangoが単体テストの合間にデータベースを更新する処理を行うことです。

于 2012-02-21T23:58:34.163 に答える