私はセクションで分けられたサイトをプログラミングしています。それ自体はサブセクションで分かれています。私の設定では、ユーザーがセクションへのリンクをクリックすると(例えば '/ home'としましょう)、それらのサブセクションの1つにリダイレクトされます(例えば、 '/ home/cover')。さらに、ユーザーがページルートに移動すると、セクションの1つ(私の場合は '/ home')にリダイレクトされます。その設定では、誰かがルートに行くときに何が起こるのか、最初に '/ home'にリダイレクトされ、そこから '/ home/cover'にリダイレクトされます。Django:ターゲットURLもリダイレクトである場合のリダイレクトのテスト
メインurls.py:
from django.conf.urls import patterns, include, url
from django.views.generic.base import RedirectView
urlpatterns = patterns('',
url(r'^$', RedirectView.as_view(url='/home')),
url(r'^home/', include('components.home.urls', namespace='components.home')),
...
)
コンポーネント/ホーム/ urls.py:これらのリダイレクションは、次のように実装されている。実際には
from django.conf.urls import patterns, include, url
from django.views.generic.base import RedirectView
from components.home import views
urlpatterns = patterns('',
url(r'^$', RedirectView.as_view(url='cover')),
url(r'^cover$', views.cover, name='home_cover'),
...
)
、これは正常に動作するようです:私は移動することができます私のサイトとすべてのリダイレクトは、彼らがすべきことをします。しかし、私はユニットテストを実装する方法、特にルートリダイレクトを理解することはできません。私はそれを実行したとき、私はエラーに直面していますが、
def test_root_url_redirects_to_home_url(self):
response = self.client.get('/')
self.assertRedirects(response, '/home', status_code=301)
:今
"AssertionError: 301 != 200 : Couldn't retrieve redirection page '/home':
response code was 301 (expected 200)."
、私は簡単にすべての二重のリダイレクトを削除することができ
私はもともと設計されたテストは、のようでしたすべてのリダイレクトされたURLポイントをターゲットに直接渡しますが、現在の設定ではよりクリーンでメンテナンスが容易なので、何らかの方法で正しくテストすることができれば完璧です。
私はDjangoとWeb開発の一般的な話から新しくなっています。ここではっきりと答えがわからないのは残念です。
このテストは、 'target_status_code = 301'を追加して正常に動作しました。どうもありがとう! – Ninethousand
@Ninethousand問題はありませんが、私の回答があなたの質問に答えた場合は、それを正しい答えとupvoteとしてマークしてください。ありがとう! – bouke
正解とマークされましたが、私は最近登録したので、まだupvoteすることはできません。私はできるだけ後で戻ってきます。 – Ninethousand