2017-12-16 10 views
1

私は私のDjangoアプリのテストを書いています。私は、適切な応答のためのajax登録要求のテストを反復する方法を理解しようとしています。それは働いていますが、私はそれがより効率的な方法で実行できることを知っています。もっとpythonicテストする方法

def test_ajax_register(self): 
    c = Client() 
    # Check register success 
    response = c.post('/register/', { 
     'register-username': 'testuser', 
     'register-email': '[email protected]', 
     'register-password': 'password' 
    }) 
    self.assertEqual(json.loads(response.content)['status'], 'success') 
    self.assertEqual(response.status_code, 200) 

    # Check register failed username taken 
    response = c.post('/register/', { 
     'register-username': 'testuser', 
     'register-email': '[email protected]', 
     'register-password': 'password' 
    }) 
    self.assertEqual(json.loads(response.content)['status'], 'fail') 
    self.assertEqual(json.loads(response.content)['error_msg'], 'username already in use') 

    # Check register failed email in use 
    response = c.post('/register/', { 
     'register-username': 'testuser1', 
     'register-email': '[email protected]', 
     'register-password': 'password' 
    }) 
    self.assertEqual(json.loads(response.content)['status'], 'fail') 
    self.assertEqual(json.loads(response.content)['error_msg'], 'email already in use') 

    # Check register failed password length 
    response = c.post('/register/', { 
     'register-username': 'testuser2', 
     'register-email': '[email protected]', 
     'register-password': 'pass' 
    }) 
    self.assertEqual(json.loads(response.content)['status'], 'fail') 
    self.assertEqual(json.loads(response.content)['error_msg'], 'password must be atleast 8 characters long') 
+1

コードが機能している場合は、[codereview.se]の質問を検討してください。 – usr2564301

答えて

0

テストを別々の方法に分けてください。接頭辞がtest_であれば、それぞれがトリガーされ、各テストはスタンドアロンテストとして実行することもできます。何かをプリセットする必要がある場合は、setUpメソッドとtearDownメソッドを使用します。

def test_ajax_register(self): 
    # Test registration 
    c = Client() 
    # Check register success 
    response = c.post('/register/', { 
     'register-username': 'testuser', 
     'register-email': '[email protected]', 
     'register-password': 'password' 
    }) 
    self.assertEqual(json.loads(response.content)['status'], 'success') 
    self.assertEqual(response.status_code, 200) 


def test_failed_registration(self): 
    # Check register failed username taken 
    response = c.post('/register/', { 
     'register-username': 'testuser', 
     'register-email': '[email protected]', 
     'register-password': 'password' 
    }) 
    self.assertEqual(json.loads(response.content)['status'], 'fail') 
    self.assertEqual(json.loads(response.content)['error_msg'], 'username already in use') 


def test_email_in_use(self): 
    # Check register failed email in use 
    response = c.post('/register/', { 
     'register-username': 'testuser1', 
     'register-email': '[email protected]', 
     'register-password': 'password' 
    }) 
    self.assertEqual(json.loads(response.content)['status'], 'fail') 
    self.assertEqual(json.loads(response.content)['error_msg'], 'email already in use') 


def test_password_length(self): 
    # Check register failed password length 
    response = c.post('/register/', { 
     'register-username': 'testuser2', 
     'register-email': '[email protected]', 
     'register-password': 'pass' 
    }) 
    self.assertEqual(json.loads(response.content)['status'], 'fail') 
    self.assertEqual(json.loads(response.content)['error_msg'], 'password must be atleast 8 characters long') 
+0

私は考えていたが、テストレスポンスを繰り返し実行するかどうかはわからなかった – doughboy

0

一般的には、論理的に大きなテストを分割し、UnitOfWork_StateUnderTest_ExpectedBehavior test method naming practiceに従ってください。

も関連する考えであるデータ駆動型テストの概念、私は個人的には、過去にddt packageを使用して、pytest parameterized testsに切り替えた - それは、機能の同じ特定の「症状」をテストするための素晴らしい方法ですさまざまな入力データを使用してテストしています。これはコードの重複を防止し(DRY principle)、テストをより組織的かつ読みやすくします。

関連する問題