У меня есть модель, которая включает ImageField вместе с другими данными (int, text и т. Д.). И у меня есть API с методом POST для создания данных с файлом изображения.
Проблема в том, как протестировать этот POST API, который включает в себя поле изображения. Хотите создать поддельное изображение в тестовом файле вместо реального файла и как проверить это вместе с другими данными.
serializer.py
class CategorySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Category
fields = ( 'id','name','description','parent_id','start','end')
read_only_fields = ('id','name','description','parent_id','start','end',)
class ServiceProviderSerializer(serializers. HyperlinkedModelSerializer):
category = CategorySerializer(many=True, read_only=True)
class Meta:
model = ServiceProvider
fields = (
'id',
'country_code',
'city',
'zip_code',
'service_type',
'preferred',
'display_bann',
'detail_name',
'detail_address',
'detail_description1',
'detail_description2',
'photo',
'category',
)
read_only_fields = ('id',)
def create(self, validated_data):
"""
Overriding the default create method of the Model serializer.
"""
# category_data = validated_data.pop('category')
category_data = self.context['request'].data.get('category')
service_provider = ServiceProvider.objects.create(**validated_data)
category_data = json.loads(category_data)
for category in category_data:
categoryObj = Category.objects.get(pk=category['id'])
service_provider.category.add(categoryObj)
return service_provider
test.py
def setUp(self):
self.new_service_provider = {
'country_code': "DE",
'city': "FRANKFURT AM MAIN",
'zip_code': 60435,
'service_type': "Fitness Studio",
'preferred': True,
'display_bann': "?",
'detail_name': "City Fitness Frankfurt",
'detail_address': "Trakehner Str. 5, 60487 Frankfurt am Main",
'detail_description1': "Based on review, we suggest you to go to this studio",
'detail_description2': "",
'category':[{'id':self.category1.pk}]
}
def test_post_service_provider(self):
self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.adminUser.auth_token.key)
# get API response
response = self.client.post(
reverse('service_provider-create'),
data=self.new_service_provider,
content_type='multipart/form-data'
)
print(response.data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
В настоящее время я не включил имя поля photo
, так как не знаю, как его высмеивать.