2017-12-31 217 views
1

このメソッドのunittestをDjangoに書きたいと思います。Djangoでunittestビューを作成するにはどうすればよいですか?

def activate(request): 
    id = int(request.GET.get('id')) 
    user = User.objects.get(id=id) 
    user.is_active = True 
    user.save() 
    return render(request, 'user_authentication/activation.html') 

私はこのようなSTHを書いた:

def test_activate_view(self): 
    response = self.client.get('/activation', follow=True) 
    self.assertTemplateUsed(response, 'user_authentication/activation.html') 

を私はエラーが出るので、それは動作しません:

id = int(request.GET.get('id')) 
TypeError: int() argument must be a string or a number, not 'NoneType': 

は、私は私のテストでは何を変更する必要がありますか?

+0

このテストではバグが見つかりました。誰かがGETリクエストで 'id = ..'パラメータを渡さないと500エラーが発生します。あなたはおそらく最初にバグを修正する必要があります;-) – thebjorn

答えて

2

あなたのビューはrequest.GETからデータを読み込む - あなたはこのデータを渡す必要があります。

response = self.client.get('/activation?id=1', follow=True) 

ます。また、データベースから後でこのユーザーを取り込みます。そのため、いくつかのフィクスチャー・データをロードする必要があります。 manage.py dumpdataを使用してフィクスチャを作成し、そのようなあなたのユニットテストでそれをロードします。詳細な説明のためのロード備品について

class UserTestCase(TestCase): 
    fixtures = ['fixture.json', 'users'] 

Read the docs。あなたはこのユースケースのためのユーザーidを使用しないでください、あなたのアプローチ

に関する

注意。このidを簡単に推測し、アカウントを有効にすることができます。

誰かが有効なメールアドレスを登録している場合は、idのリンクを受信し、後で有効なメールアドレスを入力せずに一連のアカウントを作成することができます。

代わりに、固有のランダムな秘密(別名トークン)を生成し、このトークンをユーザーに関連付けることができます。あなたのビューは、それらのトークンを受け入れ、それに基づいてユーザーを解決する必要があります。この方法では、もはや容易に活性化することができない。

+1

Djangoの内蔵パスワードは電子メールでリセットされ、この操作を行うために必要なすべての機能があります:https://simpleisbetterthancomplex.com/tutorial/2016/09/19/how-to- create-password-reset-view.html – thebjorn

関連する問題