Python 使用ImageField测试Django视图
我有下面的模型和表格Python 使用ImageField测试Django视图,python,django,unit-testing,Python,Django,Unit Testing,我有下面的模型和表格 class AdImage(models.Model): advertiser = models.ForeignKey(Advertiser) picture = models.ImageField('Ad picture', upload_to='ad_pics/%Y-%m-%d/') class AdImageForm(forms.ModelForm): class Meta:
class AdImage(models.Model):
advertiser = models.ForeignKey(Advertiser)
picture = models.ImageField('Ad picture',
upload_to='ad_pics/%Y-%m-%d/')
class AdImageForm(forms.ModelForm):
class Meta:
model = AdImage
exclude = ['advertiser']
helper = FormHelper()
helper.layout = Layout(
Div('picture'),
FormActions(
Submit('submit', "Sichern")
)
)
这通过以下方式呈现:
class CreateAdImage(LoginRequiredMixin, CreateView):
form_class = AdImageForm
template_name = 'advertis/adimage_form.html'
def form_valid(self, form):
slug = self.kwargs.get('slug', None)
advertiser = Advertiser.objects.get(slug=slug)
form.instance.advertiser=advertiser
form.save()
ret = render(self.request, 'modal_form_success.html',
{
'success_message': "Bild gespeicher fuer %s gespeichert" %
(advertiser.user.get_full_name()),
'reload' : True,
})
return ret
这很有效。我可以用
class AdImageFormTestCase(TestCase):
def setUp(self):
self.creator = ShrUser.objects.create_user(username="foo",
email="hallo.ich@localhost.de", password="bla")
self.advertiser = Advertiser.objects.create(user=self.creator,
city='Chicago')
self.uploaded_image = get_temporary_image()
self.form_data = {}
self.file_dict = {
'picture': self.uploaded_image,
}
def test_AdImageCreate(self):
form = AdImageForm(self.form_data, self.file_dict)
self.assertTrue(form.is_valid())
self.u图像在哪里
def get_temporary_image():
io = BytesIO()
size = (200,200)
color = (255,0,0,0)
image = Image.new("RGBA", size, color)
image.save(io, format='JPEG')
image_file = InMemoryUploadedFile(io, None, 'foo.jpg', 'jpeg',
image.size, None)
image_file.seek(0)
return image_file
但是我无法运行视图测试。我总是遇到以下要求的现场:
def test_create_adimage(self):
advertiser = Advertiser.objects.create(user=self.user)
response = self.client.get(reverse('create_adimage', kwargs={'slug' : advertiser.slug,}))
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'advertis/adimage_form.html')
self.uploaded_image = get_temporary_image()
post_data = {
}
file_dict = {
'picture': self.uploaded_image,
}
response = self.client.post(reverse('create_adimage', kwargs={'slug': advertiser.slug,}),
post_data=post_data, file_dict=file_dict)
self.assertEqual(response.status_code, 200)
有人知道如何设置post_数据和file_dict以获得有效的表单吗
问候
Michael关于AKS的评论,以下作品非常完美
response = self.client.post(reverse('create_adimage', kwargs={'slug': advertiser.slug,}),
post_data=post_data, data=file_dict)
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'Bild fuer %s gespeichert' % (advertiser.user.get_full_name()))
client.post
应该使用关键字参数data=file\u dict
.Perfect。请参阅下面的帖子,您不需要Post\u data=Post\u data
。