0
我想測試一個User
模型並在Python 3.4
環境中查看,但我在解決問題時遇到困難。Django REST測試:屬性丟失
在我的應用程序中,只有職員用戶應該能夠添加/刪除/修改用戶配置文件。因此,在setUp
我創建一個管理員用戶與字段is_staff集。然後,在測試案例中,我強制身份驗證作爲此管理員用戶,這應該允許我創建一個新用戶。此代碼如下所示:
class UserTests(APITestCase):
def setUp(self):
self.admin = User(username='admin', password='pass', is_staff=True)
self.admin.save()
def test_create_user(self):
"""
Ensure we can create a new user object without any optional fields.
"""
url = reverse('user-list')
data = {'username': 'adam', 'is_staff': False}
self.client.force_authenticate(user='admin')
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(response.data, data)
運行在後續的錯誤跟蹤這個測試用例結果:
Error
Traceback (most recent call last):
File "/Users/Jonathan/GitHub/h2oiq_api/h2oiq_api/test.py", line 19, in test_create_user
response = self.client.post(url, data, format='json')
.
.
.
File "/Users/Jonathan/.virtualenvs/h2oiq-api/lib/python3.4/site-packages/rest_framework/test.py", line 90, in post
return self.generic('POST', path, data, content_type, **extra)
File "/Users/Jonathan/.virtualenvs/h2oiq-api/lib/python3.4/site-packages/rest_framework/views.py", line 359, in initial
self.check_permissions(request)
.
.
.
File "/Users/Jonathan/.virtualenvs/h2oiq-api/lib/python3.4/site-packages/rest_framework/views.py", line 304, in check_permissions
if not permission.has_permission(request, self):
File "/Users/Jonathan/.virtualenvs/h2oiq-api/lib/python3.4/site-packages/rest_framework/permissions.py", line 55, in has_permission
return request.user and request.user.is_staff
AttributeError: 'str' object has no attribute 'is_staff'
可能有人請解釋爲何這個屬性不存在?我已經徹底閱讀了Django REST框架文檔,尤其是APIClient
,Permissions
和BasicAuthentication
指南,但我一直無法找到關於此問題的其他信息。我已經嘗試評論強制認證,並沒有解決任何問題。
讚賞任何數量的幫助或洞察力!我正在學習Django REST。
IIRC'force_authenticate()'應該得到一個用戶對象,而不是用戶名的字符串。因此'self.client.force_authenticate(user = self.admin)'在你的情況下。 – Jkdc
@Jkdc非常感謝。這樣一個簡單的修復! – Jonathan
很高興幫助!我將提交它作爲答案。 – Jkdc