繁体   English   中英

使用ImageField测试Django视图

[英]Testing Django Views with an ImageField

我有以下型号和表格

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.uploaded_image在哪里

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_data和file_dict以便具有有效的格式?

亲切的问候

迈克尔

关于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()))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM