我是Django的新手,并且在Laravel
中拥有扎实的背景(如果您碰巧做出一个很棒的比喻)
我正在尝试将身体传递到终点,但我做不到。
我尝试过:
fake = Faker('pt_PT')
fake.add_provider(company)
client = APIClient()
class CompanyPostTestCase(APITestCase):
def setUp(self):
self.email = fake.email()
self.username = str(fake.company()).split()[0]
self.valid_payload = {
'email': self.email,
'password': '123',
'username': self.username
}
def test_company_was_created(self):
response = self.client.post('/v1/company/',
self.valid_payload,
# Also tried with content_type='application/json'
format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
但是在调试模式下执行时,response
对象在POST
内的_closable_objects
中有QueryDict: {}
,我假设未指定body
。错误消息还显示b'{"message":"You must provide a password"}'
,该错误消息清楚地表明未通过正文。
通过邮递员,我可以发出相同的请求并创建一个Company
,而没有任何问题。
解决这个问题的任何想法都很棒。
编辑
我也尝试过将valid_payload
直接传递给client.post()
,就像这样:
response = client.post('/v1/company/', data={
'email': self.email,
'password': '123',
'username': self.username
},
format='json')
此后仍然无法正常工作
答案 0 :(得分:0)
客户端不是CompanyPostTestCase
的一部分,可能会导致问题。初始化内部函数应该可以解决问题。
class CompanyPostTestCase(APITestCase):
def setUp(self):
self.email = fake.email()
self.username = str(fake.company()).split()[0]
self.valid_payload = {
'email': self.email,
'password': '123',
'username': self.username
}
def test_company_was_created(self):
client = APIClient()
response = client.post('/v1/company/',
self.valid_payload,
format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
答案 1 :(得分:0)
我最近也遇到了类似的问题,以防万一它可以帮助处于相同位置的任何人,因为调试起来很痛苦。
在我的情况下,它最终是由于在Django设置文件的DRF的DEFAULT_PARSER_CLASSES
中指定了错误的JSON解析器类所致。解决方案只是将其替换为默认的DRF JSON解析器(rest_framework.parsers.JSONParser
)。