我正在编写除PUT以外的所有测试用例都通过的测试
from django.test import TestCase
from rest_framework.test import APIClient
class ViewTestCase(TestCase):
@classmethod
def setUpTestData(cls):
cls.client = APIClient()
def setUp(self):
"""setUp() runs before every single test method."""
self.user_data = {'first_name': "John", 'last_name': "Doe", 'email_id': "john@doe.com",
'phone_number': "987654321", 'is_verified': False}
self.response = self.client.post(
reverse('create'),
self.user_data,
format='json')
def test_api_can_update_user(self):
user = User.objects.get()
changes = {'first_name': "Johnny"}
changed_user_data = {**self.user_data, **changes}
response = self.client.put(
reverse('details', kwargs={'email': user.email_id}),
changed_user_data,
format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
此测试用例失败,并带有response.status_code = 415(不受支持的媒体类型) 而如果我只是将客户端初始化从setUpTestData()移到setUp() 一切都过去了。
def setUp(self):
self.client = APIClient() # Test case passed now.
...
还有其他针对GET,POST,DELETE的测试,所有这些测试都通过了 不管客户端实例是否共享(setUpTestData)。
PS:DAPI Web api视图中的所有api,包括PUT都可以工作。
答案 0 :(得分:0)
根据我的理解,并经过client
以上的测试,它不是该类的实例属性,而是一个类属性,因此是错误响应。尝试在self.client
方法和cls.client
方法中将setUp
更改为test_api_can_update_user
。
同样,根据我的经验,建议在创建测试用例之前初始化client
。