У меня возникают проблемы с публикацией данных в некоторых представлениях, использующих Django REST framework в моих тестах. Я использую django_webtest для тестирования своего пользовательского API. У меня возникла проблема со следующим кодом:
class UserApiTest(WebTest):
def setUp(self):
AdminFactory()
def test_accessing_user_list_shows_one_user(self):
user_list = self.app.get('/quickstart/users/', user='admin')
assert_that(user_list.json, has_entry('count', 1))
def test_posting_new_user_returns_url_for_user_detail(self):
post_data = {'username': 'john', 'email': '[email protected]'}
user_create = self.app.post('/quickstart/users/', post_data, user='admin')
url = 'http://localhost:80/quickstart/users/2/'
assert_that(user_create.json, has_entry('url', url))
Проблема в том, что я получаю ошибку CSRF при запуске второго теста. Глядя на документацию Django REST Framework, я прочитал, что ошибка CSRF возникает только при использовании аутентификации на основе сеанса. Итак, я решил попробовать обычную аутентификацию, которая, согласно документации Django, требует только установки переменной среды REMOTE_USER
:
class UserApiTest(WebTest):
extra_environ = {'REMOTE_USER': 'admin'}
def setUp(self):
AdminFactory()
def test_accessing_user_list_shows_one_user(self):
user_list = self.app.get('/quickstart/users/')
assert_that(user_list.json, has_entry('count', 1))
def test_posting_new_user_returns_url_for_user_detail(self):
post_data = {'username': 'john', 'email': '[email protected]'}
user_create = self.app.post('/quickstart/users/', post_data)
url = 'http://localhost:80/quickstart/users/2/'
assert_that(user_create.json, has_entry('url', url))
Это работало хуже, так как пользователь даже не был авторизован для просмотра этих страниц (т. е. для доступа к возвращенным URL-адресам 403).
Мой вопрос: как правильно настроить базовую аутентификацию с помощью django_webtest?