2015-01-30 1 views
0

Я использую django.test.Client писать тесты для просмотров ДжангоClient Джанго Тесты не работает с базой данных вызовов

По мнению Джанго:

usr = User.objects.get(id=2) 

Он не возвращает User объекта, а не вызывает ошибку ObjectDoesNotExist.

В dbshell такой же запрос работает нормально.

Какая уловка здесь?

+0

создает новую пустую базу данных для каждого теста, так что вы должны загрузить приспособление, чтобы иметь эту запись в месте для выполнения, которые получают. Нет fixture = empty db. –

+0

@PaulCollingwood Я добавил прибор таблицы User в TestCase, но все еще не работает – navyad

+0

Вы удалили данные в этот файл прибора? –

ответ

0

Создайте пользователя в setUp() методе TestCase или добавьте его в приспособление. Вот версия setUp():

class YourTestCase(TestCase): 

    def setUp(self): 
     self.user = User.objects.create(
      username='someuser', 
      email='[email protected]', 
      password='password' 
     ) 

    def test_your_code(self): 
     # now you can look it up 
     user = User.objects.get(username='someuser') 
     self.assertEqual(user.email, '[email protected]') 
+0

Я знаю, что это старое - однако, есть ли способ обойти это без необходимости вручную создавать этих пользователей в setUp? Например, если наша база данных в настоящее время имеет тонну внутренней работы, существует ли способ, чтобы django клонировал этот DB (и тест против клонирования) при запуске тестов, поэтому нам не нужно вручную добавлять потенциально тонны данных? – Hanny

+1

Прежде чем пытаться поддерживать тестовую базу данных, я бы попробовал модель Mommy - http://model-mommy.readthedocs.io/en/latest/basic_usage.html Вы установилиUp выглядели примерно так: users = mommy.make (Пользователь, _quantity = 1000) Это бит в документах об этом - http://model-mommy.readthedocs.io/en/latest/basic_usage.html#more-than-one-instance – kevinharvey

+0

Удивительно - я обязательно посмотрю на это. Цените ввод по старому вопросу! – Hanny