Как я могу в интерактивном режиме выяснить, почему тест не пройден? - PullRequest
0 голосов
/ 24 февраля 2010

У меня есть тест с ошибкой:

======================================================================  
    FAIL: test_register_should_create_UserProfile (APP.forum.tests.test_views.UserTestCAse)  
    ----------------------------------------------------------------------  
    Traceback (most recent call last):  
      File "/Users/Bryan/work/app/../app/forum/tests/test_views.py", line 25, in test_register_should_create_UserProfile  
        self.assertEqual(response.status_code, 200)  
    AssertionError: 404 != 200

Вот тест:

class UserTestCAse(TestCase):  
  def test_register_should_create_UserProfile(self):  
    from django.test.client import Client  
    c = Client()  
    # I'm skipping account/signin/ because that requires me to visit Google.  
    response = c.post('account/signin/complete/', {'username': 'john', "email":'john@beatles.com', u'bnewaccount': 'Signup'}) 
    # request.POST from pdb() session with breakpoint in register()
    # <QueryDict: {u'username': [u'john'], u'email': [u'john@beatles.com'], u'bnewaccount': [u'Signup']}>

    #How do I inspect what is breaking in the test case?  
    #How do I run the test client in the shell?  
    self.assertEqual(response.status_code, 200)  

    user = User.objects.get(username ='john')  
    self.assertTrue(user.get_profile())  

В любом случае, я могу понять, почему этот ответ не возвращает 200?

Я пытался использовать TestClient () в оболочке, но это не сработало:

In [1]: from django.test.client import Client  

In [2]: c = Client()  

In [3]: response = c.post('account/signin/complete/', {'username': 'john', "email":'john@beatles.com', u'bnewaccount': 'Signup'})  
---------------------------------------------------------------------------  

KeyError: 'tried'  

Ответы [ 2 ]

3 голосов
/ 24 февраля 2010

Это выглядит не так.

user = User.objects.get('username'=='john')  

Если вы хотите сделать запрос, вы должны писать запросы в стиле, показанном в руководстве

http://docs.djangoproject.com/en/1.1/topics/db/queries/#topics-db-queries

user = User.objects.get( username = 'john' ) 

например.

Для отладки вы можете запускать вещи из командной строки. Это то, что мы делаем. Учебник по Django показывает все примеры, как будто они вводятся в интерактивном режиме в командной строке.

>>> from myapp.models import Client
>>> Client.objects.get( name = 'value' )

и т.д.

Обычно вы не пытаетесь запустить модульные тесты из командной строки. Это трудно сделать из-за всего, что делает для вас фреймворк модульного тестирования.

Обычно вы просто просматриваете операторы функций представления приложения по одному, чтобы убедиться, что ваши функции представления действительно будут работать.

2 голосов
/ 24 февраля 2010

Если вы получаете неожиданный 404, страница ошибки Django покажет вам ошибку (при условии, что DEBUG - True). В этом случае вы могли бы просто print response.content показать эту трассировку и вырезать и вставить ее в браузер.

Кроме того, не забывайте, что с помощью интерактивного отладчика, pdb, вы можете взломать работающий тест, как любая другая форма выполнения кода, чтобы вы могли динамически проверять ответ. Или даже, поставьте точку останова перед сообщением, чтобы вы могли просмотреть представление.

Однако, при втором взгляде, я подозреваю, что ваш URL не совпадает, потому что вы пропустили начальный \.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...