私が取り組んでいるDjangoアプリケーションのテストを書こうとしていますが、それぞれのビューに使用する正確なURLをまだ決めていません。したがって、私はテストで指定されたURLを使用しています。DjangoはGETパラメータを追加して名前付きURLをテストします
c = Client()
resp = c.get(reverse('dashboard'))
は、このビューでのみログインユーザーが利用できるようになります。
は例えば、私は、URLという名前のダッシュボードを持っています。現在のユーザーが匿名の場合は、名前付きのURLであるログインページにリダイレクトする必要があります。それがこれを行うときしかし、それは次のようになり、それはちょうどから来たURL、を追跡するために、追加のGETパラメータを使用していますのため
/login?next=dashboard
私は、このリダイレクトをテストしようとすると、それが失敗しましたこれらの追加パラメータ:
明らか# It's expecting '/login' but gets '/login?next=dashboard'
self.assertRedirects(resp, reverse('login'))
、私はハードのテストにそれらをコーディングする場合、それは動作します:
self.assertRedirects(resp, '/login?next=dashboard')
しかし、その後、私が今まで私のダッシュボード・ビューのためのURLを変更する場合、私はそれを使用するすべてのテストを更新する必要があります。
これらの余分なパラメータを扱いやすくするためにできることはありますか?
アドバイスありがとうございます。
ありがとうございました。
ほとんどそれを持っていましたが、あなたはOPの質問の全体のポイントを逃しました。彼はURLの「ログイン」部分を気にするのではなく、「次の」GETパラメータを心配しています。 URLダッシュボードは将来変更される可能性がありますので、OPはテストでハードコーディングしたくありません。 @ダン:基本的にはここでも同じアプローチをとることができますが、 "ダッシュボード"を "%s"に置き換え、文字列paramに 'reverse( 'dashboard')'を渡します。 –
問題は、GETパラメータをurls.pyに直接書き込むことができないため、ログイン後に必要なURLをsettings.pyで@Dan LOGIN_REDIRECT_URL = '/ dashboard /'を使用してリダイレクトできることです。そして、あなたがビュー機能にlogin_requiredデコレータを使用すると、anonymousはこのurlにリダイレクトされます。 – greg
あなたはurls.pyで何もする必要はありません。 'next'パラメータは、文字通り「次のURLに行く」という意味です。彼はURLに '?next =%s'%reverse( 'dashboard') 'が含まれていると主張するだけです。それで、どんなURL「ダッシュボード」が解決しても、それは一致します。 –