2010-02-23 6 views
0

У меня есть тест, который неисправный с:Как я могу интерактивно исследовать, почему тест терпит неудачу?

====================================================================== 
    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":'[email protected]', u'bnewaccount': 'Signup'}) 
    # request.POST from pdb() session with breakpoint in register() 
    # <QueryDict: {u'username': [u'john'], u'email': [u'[email protected]'], 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":'[email protected]', u'bnewaccount': 'Signup'}) 
--------------------------------------------------------------------------- 

KeyError: 'tried' 

ответ

2

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

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

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

+0

Хороший глаз. «/» Зафиксировал тестовый клиент. Я не могу войти в «pdb» при запуске тестов. В оболочке никогда не отображается запрос pdb. – BryanWheelock

3

Это не выглядит правильно.

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') 

т.д.

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

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

+0

View отлично работает, я пытаюсь выяснить, как сделать django.test.client.Client запросить страницу, прежде чем я начну изменять модель User. – BryanWheelock

+0

Запуск клиента unittest в интерактивном режиме не очень практичен. Что скажут журналы-серверы о ошибке 404? –

Смежные вопросы