2013-04-19 16 views
1

test.pyДжанго носа тест дает ошибку утверждения при запуске из команды управления

# write code to test the views. 
from django.test import Client 

# import nose for tests. 
import nose.tools as noz 

class TestSettings(object): 
    """ test the nose test related setup """ 

    def setup(self): 
     self.client = Client() 

    def testTestUser(self): 
     """ Tests if the django user 'test' is setup properly.""" 
     # login the test user 
     response = self.client.login(username=u'test', password=u'test')  
     noz.assert_equal(response, True) 

, когда этот код выполняется из команды управления, дает следующий результат:

$ ./manage.py test <app-name> 
    nosetests --verbosity 1 <app-name> 
    Creating test database for alias 'default'... 
    F 
    ====================================================================== 
    FAIL: Tests if the django user 'test' is setup properly. 
    ---------------------------------------------------------------------- 
    Traceback (most recent call last): 
     File "/<python-sitepackages-dir-path>/nose/case.py",                      line 197, in runTest 
     self.test(*self.arg) 
     File "<application-path>/tests.py", line 28, in testTestUser 
     noz.assert_equal(response, True) 
    AssertionError: False != True 

    ---------------------------------------------------------------------- 

    Ran 1 test in 0.008s 

    FAILED (failures=1) 
    Destroying test database for alias 'default'... 

теперь же команды при запуске thrugh в Джанго оболочки дает следующее:

$ ./manage.py shell 
    Python 2.6.6 (r266:84292, Sep 11 2012, 08:28:27) 
    [GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2 
    Type "help", "copyright", "credits" or "license" for more information. 
    (InteractiveConsole) 
    >>> from django.test import Client 
    >>> 
    >>> import nose.tools as noz 
    >>> 
    >>> client = Client() 
    >>> response = client.login(username=u'test', password=u'test') 
    >>> noz.assert_equal(response, True) 
    >>> 
    >>> 
    >>> response 
    True 
    >>> 

пользователь «тест» активен в Джанго для текущего сценария.

Почему я получаю это утверждение об ошибке, когда я запускаю команду управления?

+0

люди догадались посмотреть:

ответ

0

Вы создаете пользователя с именем пользователя test и пароль test для своих тестов? Или загружать светильники? Уверен, что нет.

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

В setUp вы можете создать пользователь

from django.contrib.auth.models import User 
User.objects.create('test', '[email protected]', 'test') 

Как @Kevin Лондон отметил слишком

вашей команды установки должна быть

setUp, но я не думаю, что есть много делайте с ним, так как каждый TestCase имеет значение client.

+1

thats имеет смысл! спасибо –

+0

Так как по умолчанию загружать тестового пользователя .. это фактическое намерение для тестирования всех представлений, которые имеют user.is_authenticated() –

+0

@cool_n_curious Обычно я создаю тестового пользователя в методе setUp, чтобы вы могли войти в систему этим пользователем в любых мнениях, которые вам нужно протестировать против аутентифицированного пользователя – dm03514

2

Похоже, что он не наследует базовый тестовый класс, поэтому он не вызывается методом настройки до вашего теста. Я бы рекомендовал наследовать класс Django TestCase, согласно the Django documentation on testing. В этом случае он будет выглядеть следующим образом:

# write code to test the views. 
from django.test import Client 
import unittest 

# import nose for tests. 
import nose.tools as noz 

class TestSettings(unittest.TestCase): 
    """ test the nose test related setup """ 

    def setUp(self): # Note that the unittest requires this to be setUp and not setup 
     self.client = Client() 

    def testTestUser(self): 
     """ Tests if the django user 'test' is setup properly.""" 
     # login the test user 
     response = self.client.login(username=u'test', password=u'test')  
     noz.assert_equal(response, True) 
+0

@ d03514 можно обе попробовать запустить тест в соответствии с вашими решениями и поделиться выходом –

+0

Я бы предположил, что вам будет проще запускать, у меня нет имени пользователя test setup, установленного в моем локальном db. –

+0

ваш код не работает kevin. –