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