2017-05-30 37 views
1

私のログインが正しいページにリダイレクトされているかどうかを確認するテストを書こうとしています。現時点では私が働いていない、このコードを使用しています:ログインのリダイレクトのテスト

class TestAuth(TestCase): 
    def setUp(self): 
     self.client = Client() 

    @classmethod 
    def setUpTestData(cls): 
     user_login = get_user_model().objects.create(username='admin', email='[email protected]', password='asdf1234') 

     cls.user_login = user_login 

    def test_login_redirect(self): 
     response = self.client.post(
      reverse('udt:login'), 
      { 
       'username': 'admin', 
       'password': 'asdf1234' 
      } 
     ) 

     self.assertRedirects(response, reverse('udt:table_list')) 

udt:login'/udt/accounts/login/'に相当し、udt:table_list'/udt/table/'に相当ところ。

ログイン機能は、カスタムテンプレートを使用したDjangoの組み込みログインです。私は、テストを実行すると、私は次のエラーを取得する:

AssertionError: 200 != 302 : Response didn't redirect as expected: Response code was 200 (expected 302) 

私は実際にアプリでのログイン機能をテストする場合しかし、私はこれを取得:

[2017/05/30 14:43:22] HTTP POST /udt/accounts/login/ 302 [0.13, 127.0.0.1:60127] 
[2017/05/30 14:43:22] HTTP GET /udt/table/ 200 [0.15, 127.0.0.1:60127] 

それが実際にあるように私には思われます正しくリダイレ​​クトされます。

私の質問はアサーションエラーの原因となっているテストで間違っていますか?私はDjangoでテストするのはかなり新しいので、私は行方不明になっているかもしれませんが、テストが私に渡されるはずです。

これについてのお手伝いがあれば幸いです。

UPDATE

はログインテンプレートは、この(ちょうど標準Djangoのログインテンプレートを取り、それにいくつかのブートストラップクラス名を追加しました)のようになります。ログインの

{% load bootstrap3 %} 

<form id="login-form" method="post" action="{% url 'udt:login' %}"> 
    {% csrf_token %} 
    <table class="table"> 
     <tr> 
      <td><label for="id_username">Username</label></td> 
      <td><input id="id_username" name="username" type="text" class="form-control"></td> 
     </tr> 
     <tr> 
      <td><label for="id_password">Password</label></td> 
      <td><input id="id_password" name="password" type="password" class="form-control"></td> 
     </tr> 
    </table> 
    {% if form.errors %} 
     <p class=" label label-danger"> 
      Your username and password didn't match. 
      Please try again. 
     </p> 
    {% endif %} 
    <input type="submit" value="Login" class="btn btn-primary pull-right" /> 
    <input type="hidden" name="next" value="{{ next }}" /> 
</form> 

URLはそうのようになります。

url(r'^login/$', auth_views.login, {'template_name': 'auth/login.html'}, name='login') 

私はDjango v.1.11.1を使用しています。

+0

あなたがやっていることを達成する最良の方法は、単にこの行をあなたのsettings.py 'LOGIN_REDIRECT_URL = '/ YourSite /''に入れていることだと思います。これは100%動作します。 – hansTheFranz

+0

私はそれを既にsettings.pyに持っていますが、私はまだ同じエラーが発生しているので、なぜそれが起こっているのか分かりません! – BeeNag

+0

この場合、私は何が間違っているのかごめんなさい。経験豊かなユーザーが私たちを教えてくれることを願っています。 – hansTheFranz

答えて

1

誤ってユーザーを作成しています。パスワードが正しくハッシュされるように、create()の代わりにcreate_userを使用する必要があります。余談として

@classmethod 
def setUpTestData(cls): 
    user_login = get_user_model().objects.create_user(username='admin', email='[email protected]', password='asdf1234') 

それが不要であるとして、あなたはあなたのsetUpメソッドを削除することができます。 DjangoのTestCaseクラスはself.clientの設定を行います。

もう一つ - あなたのURLパターンはDjangoの1.11の罰金ですが、あなたはそれがジャンゴと互換性があるようにLoginViewを使用するように更新することができ2.1+:私はテストが、私のお手伝いをすることはできません

url(r'^login/$', auth_views.LoginView.as_view(template_name= 'auth/login.html'), name='login'), 
+0

あなたは両方の点数が正しいですね!どうもありがとう! – BeeNag

関連する問題