2016-10-04 7 views
0

私はDjangoで最初のテストをしようとしていますが、それをやっているのか、それとも非常に簡単なテストが説明されているのかを読んだ後に私はまだ分かりません。Djangoでのテスト方法

私は "login" URLに行き、ログインを行い、成功したログインが許可されたページにリダイレクトされた後にテストをしようとしています。

from unittest import TestCase 

from django.test.client import Client 


class Test(TestCase): 
    def testLogin(self): 
     client = Client() 
     headers = {'X-OpenAM-Username': 'user', 'X-OpenAM-Password': 'password', 'Content-Type': 'application/json'} 
     data = {} 
     response = client.post('/login/', headers=headers, data=data, secure=False) 
     assert(response.status_code == 200) 

とテストの成功が、それは「/ /ログイン」搭載の200 beacuseだかのテストは、ログインを行うとするので、リダイレクト後に200コードを取得する場合、私は知りません。

ログイン後にURLがリダイレクトされたことをテストで確認できますか?テストに役立つプラグインなどがありますか?または私は私の意見とモデルをテストするための良いチュートリアルを見つけることができますか?

ありがとうございます。

+0

[Django doct testing](https://docs.djangoproject.com/ja/1.10/topics/testing/)に従ってください。どうしてですか? –

+0

私はドキュメントのチュートリアルに従おうとしましたが、エラーが発生します。 – Aker666

答えて

1

followパラメータを使用

If you set follow to True the client will follow any redirects and a redirect_chain attribute will be set in the response object containing tuples of the intermediate urls and status codes.

次に、あなたのコードがdjango.testインポートから

はそれがself.assertRedirectsではなく、だと

class Test(TestCase): 
    def test_login(self): 
     client = Client() 
     headers = {'X-OpenAM-Username': 'user', 'X-OpenAM-Password': 'password', 'Content-Type': 'application/json'} 
     data = {} 
     response = client.post('/login/', headers=headers, data=data, secure=False) 
     self.assertRedirects(response,'/destination/',302,200) 

注意をテストケースと同じくらい簡単ですassertまたはassertRedirects

空の辞書をフォームデータとして送信しているため、上記のテストが失敗する可能性が高いことにも注意してください。 Djangoのフォームビューは、フォームが無効なときにリダイレクトされず、ここで空のフォームがおそらく無効になります。

+0

ああ、ありがとう。私は今仕事中です、私は後で試してみましょう!私はDjangoでログインしていないので、IDP(OpenAM)のログインを委任し、同じフォーマットと動作を使用しているので、テストでも動作するはずです:/ – Aker666

+0

ええ、その場合は動作するはずです – e4c5

+0

作品、もう1つの質問のみ。なぜ私は "AssertionError:応答は期待どおりにリダイレクトされませんでした:レスポンスコードは200(予想された302)"コードで私は "返すHttpResponseRedirect( '/ loggedin')"を使用します。それはそうです? – Aker666

1

Djangoにはテスト用のツールがたくさんあります。このタスクでは、Djangoのテストケースクラスを使用する必要があります(例:django.test.TestCase)。 次に、方法assertRedirects()を使用して、リダイレクト先とコードを確認します。 hereが必要な情報を見つけることができます。 私はあなたの仕事のためのコードを記述しようとしました:

from django.test import TestCase 

class Test(TestCase): 
    def test_login(self): 
     data = {'X-OpenAM-Username': 'user', 'X-OpenAM-Password': 'password'} 
     response = client.post('/login/', data=data, content_type='application/json', secure=false) 
     assertRedirects(response, '/expected_url/', 200) 

は、その後、あなたはすべてのテストを実行するためにpython3 manage.py testを使用することができます。適切にリダイレクトをテストする

+0

こんにちは、私はこの質問をする前にこれをしようとしましたが、私は "assertRedirects url = response.url AttributeError: 'HttpResponse'オブジェクトには属性 'url'が常にありません。 – Aker666

関連する問題