2017-10-13 10 views
0

私はテストに取り組んでいます。そして、私はクリーンメソッドではかなりの論理を持つ小さなフォームを持っています。私は、現在のユーザーに関するいくつかの情報にアクセスするビットがある私のきれいな方法でユーザーオブジェクトを使ったDjangoでのテストフォーム

class DependentFormTest(TestCase): 

    def test_dependent_form_birthdate_out_of_range(self): 
     form_data = { 
      'first_name': 'Bill', 
      'last_name': 'Robusin', 
      'birth_date': '10/12/1801', 
      'gender': 'Male', 
      'relationship': 'dependent', 
      'street_address_1': '123 Any lane', 
      'city': 'Billson', 
      'state': 'WA', 
      'zip': '50133', 
     } 
     form = DependentForm(data=form_data) 
     self.assertFalse(form.is_valid()) 

私のテストでは、このようになります。このようなルックス失敗スニペット:この行

user_benefit = Benefit.objects.get(user=self.user) 

は私のテストは、次のエラーでエラーに引き起こすものである:

Benefit matching query does not exist

テストの「ユーザー」であるので、これは、真であります'なし'。

このフォームの有効性をテストできるように、テストでユーザーを設定するにはどうすればよいですか?

答えて

1

テスト中setUp()メソッドを使用すると、テスト目的でユーザーを作成できます。それを再使用します。

私の知る限り、あなたのユーザーはリクエストから来ていると思います。したがって、ログインしてフォームにデータを投稿するには、djangoテストクライアントを使用する必要があります。

ユーザーがフォームの初期化中に明示的に設定されていない場合は、フォームの clean方法でユーザーにアクセスすることができません
0

は(ここを参照してください:django: how to access current request user in ModelForm?

を使用すると、フォームの初期化時にコンストラクタにユーザーを渡す場合は、あなたのテストでそれを行うこともできます。

user = User.objects.first() # probably you should think about a better way to obtain a user instance 
form = DependentForm(data=form_data, user=user) 
self.assertFalse(form.is_valid()) 
関連する問題