0

djangoでミドルウェアをテストする方法を見つけようとしています。私が書いているミドルウェアは、特定の条件下でユーザーにログを記録します(電子メールで送信されたキーが有効な場合)。だから明らかに私はとに依存しdjango.contrib.authていdjango.contrib.sessionsます。

ログイン部分のテストで問題が発生しています。私はこのようなリクエストをしています:

user = User.objects.create_user('user', 'user@example.org', 'password')
key = LoginKey.objects.create(user=user)
request = self.factory.get('/', data={'auth_key': key.hash}) # self.factory is a RequestFactory()
self.middleware.process_request(request) # self.middleware is MyMiddleware()

セッションが設定されていないため、失敗します。次に、テストクラスに小さなスニペットを書きました。

def make_session(self, request):
    SessionMiddleware().process_request(request)

が原因で失敗し'User' object has no attribute 'backend'ます。その意味はわかりませんが、インストールしたミドルウェアをすべて実行する必要があるのではないかと思います。

ミドルウェアを実行するためだけにこれを偽のビューにしたくはありませんが、現時点では別のオプションを見つけることができません。

だから私はただ知りたかったのですが、このウサギを穴の奥まで追いかける前に、ダクトテープをそれほど必要としない方法はありますか?

4

1 に答える 1

1

これにはテストクライアントを使用する必要があります。これにより、ミドルウェアが実行され、セッションキーが作成されます。

response = self.client.get('/?auth_key=%s' % key.hash)
self.assertTrue(response.context['user'].is_authenticated()) # for example
于 2011-06-22T19:36:05.623 に答える