2015-01-28 2 views
1

Я пишу несколько тестов для формы на сайте Django. Я хочу проверить, что зарегистрированный пользователь может использовать форму, предполагающую правильный ввод. С этой целью я использую фабрику запросов Django. Похоже, я не могу войти в тестовый пользователь. Это, или я даже не делаю запрос правильно. Я не уверен. Соответствующий код ниже:Django: Как связать пользователя с фабрикой запросов

def create_user(): 
     username = 'User '+id_generator() 
     return User.objects.create(username = username, password = 'password') 

def test_can_register_deck(self): 
     t = create_empty_tourney() 
     u = create_user() 
     d = create_deck(u) 
     rf = RequestFactory() 
     request = rf.post(reverse('tourney:tourney', args=(t.slug,)),{'deck' : d}) 
     request.user = u 
     response = self.client.get(reverse('tourney:tourney', args=(t.slug,)), request) 
     self.assertEqual(response.status_code, 200) 

Запрос должен думать, что пользователь вошел в систему, или остальные испытания не будут работать. Это не вызывает ошибок, но я даже не уверен, что мой response правильно использует запрос. Правильно ли я говорю тесту, чтобы «сделать запрос на участие в турнирной странице в качестве этого пользователя и попытаться отправить колоду»?

ответ

1

Я думаю, что RequestFactory и клиент - это два разных способа тестирования представлений django.

request, который возвращается с rf.post, предназначен для передачи непосредственно функции просмотра. Если бы вы это сделали, я думаю, что вы найдете это, пользователь будет обнаружен как зарегистрированный.

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

self.client.login(
    username=u.username, 
    password='password') 
+0

Теперь я понимаю. Спасибо за направление. Для тех, кого интересует, моя строка 'response' должна быть такой:' response = tourney (request, t.slug) 'где' t.slug' является обязательным позиционным аргументом. – fildred13