テストでDjangoRESTフレームワークを使用する一部のビューにデータを投稿するのに問題があります。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': 'john.doe@example.com'}
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))
問題は、2番目のテストの実行時に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': 'john.doe@example.com'}
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))
ユーザーがこれらのページを表示することさえ許可されていなかったため(つまり、返された403のURLにアクセスした場合)、これはさらにうまく機能しませんでした。
私の質問は、django_webtestを使用して基本認証を適切に設定するにはどうすればよいですか?