私はDjangoのテストフレームワークを使い始めました。認証されたページのテストを開始するまではすべて正常に動作していました。簡単のためDjangoテストフレームワークのlogin()
、のは、これはテストですと言ってみましょう:
class SimpleTest(TestCase):
def setUp(self):
user = User.objects.create_user('temporary', '[email protected]', 'temporary')
def test_secure_page(self):
c = Client()
print c.login(username='temporary', password='temporary')
response = c.get('/users/secure/', follow=True)
user = User.objects.get(username='temporary')
self.assertEqual(response.context['email'], '[email protected]')
私は、それが失敗し、このテストを実行すると、私は、ログインの印刷戻り値を(参照した後)は、真を返します。 response.contentはログインページにリダイレクトされます(ログインが失敗した場合、認証デコレータはログインページにリダイレクトされます)。私は、認証を行うデコレータでブレークポイント入れている:
def authenticate(user):
if user.is_authenticated():
return True
return False
をし、それが本当に偽を返します。 test_secure_page()の4行目は、適切にユーザを取得します。
これはビュー関数である:私は、アプリケーション(テストの外)からログインしようとすると、当然のことながら
@user_passes_test(authenticate, login_url='/users/login')
def secure(request):
user = request.user
return render_to_response('secure.html', {'email': user.email})
、すべてが正常に動作します。
あなたがテストしているビューのコードを投稿してください。 –
@ S.Lott私は自分のログインページをテストしていませんでしたが(私も同様でしたが、どちらもうまくいきませんでした)、システムの "安全な"部分の残りの部分です。そのため、login()を使ってみました。 – kevin
@kevin。問題は、ログインするポストがクライアントによって使用されるクッキーを作成することです。クッキーなし、安全なアクセスなし。 AFAIK、 'login()'関数はクッキーを作成してクライアントに返しません。あなたはDjangoのドキュメントの例を再現し、それらがあなたのために働くかどうかを調べることができますか? –