gpt4 book ai didi

python - 运行 TestCase 时出现 AssertionError : 400 ! = 201

转载 作者:太空宇宙 更新时间:2023-11-04 04:51:06 24 4
gpt4 key购买 nike

我是使用 Django 的新手。当我运行命令 python manage.py test 时,我不断收到以下错误;

Tact/tact_api/lines/test_views.py", line 103, in 
test_api_can_create_an_event
self.assertEqual(self.response.status_code, status.HTTP_201_CREATED)
AssertionError: 400 != 201

----------------------------------------------------------------------
Ran 8 tests in 0.105s

对于解决此问题的任何帮助,我将不胜感激!我自己的一些想法包括;

1) 我的事件对象发布请求中可能存在语法错误。请参阅下面的测试代码。2)问题可能与配置有关。

供引用,参见下面的测试;

class EventViewTestCase(TestCase):
"""
Test suite for Event API views
"""
def setUp(self):
"""
Define the event test client and other test variables.
"""
user = User.objects.create(username="tactician")

# initialize client and force authentication
self.client = APIClient()
self.client.force_authenticate(user=user)

# create and post a new line using authorized user
# since user model instance is not serializable, use its Id/PK
self.line_data = {'owner': user.id, 'title': 'Title goes here'}
self.res = self.client.post(reverse('line-list'), self.line_data, format='json')

# create and post a new event linked to created line using authorized user
line = Line.objects.get()
self.event_data = {'owner': user.id, 'pk': line.id, 'title': 'Title goes here',
'desc': 'Desc. here', 'start': timezone.now(), 'end': timezone.now()}
self.response = self.client.post(reverse('event-list'), self.event_data, format='json')

def test_api_can_create_an_event(self):
"""
Test the api has event creation capability.
"""
self.assertEqual(self.response.status_code, status.HTTP_201_CREATED)

序列化器;

class EventSerializer(serializers.HyperlinkedModelSerializer):
"""
Convert Event model instance into native Python datatypes to be rendered as JSON.
"""
owner = serializers.ReadOnlyField(source='owner.username')

class Meta:
model = Event
fields = ('url', 'id', 'owner', 'created', 'modified', 'title', 'desc', 'start',
'end', 'line')

def get_fields(self, *args, **kwargs):
"""
create and return a new Event object (linked to a user owned Line) with validated data.

update and return an existing Event object with validated data.
"""
fields = super(EventSerializer, self).get_fields(*args, **kwargs)
view = self.context['view']
owner = view.request.user
fields['line'].queryset = fields['line'].queryset.filter(owner=owner)
return fields

最佳答案

此问题现已解决。

首先,在我的测试套件中,我提供给发布请求的事件负载数据存在轻微的语法错误。

self.event_data = {'owner': user.id, 'pk': line.id...}

改为;(是我的事件模型中指定的外键字段名。)

self.event_data = {'owner': user.id, 'line': line.id...}

其次,对于我的事件序列化程序,我使用了错误的基类;

class EventSerializer(serializers.HyperlinkedModelSerializer)

改为;

class EventSerializer(serializers.ModelSerializer) 

关于python - 运行 TestCase 时出现 AssertionError : 400 ! = 201,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48300369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com