微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将数据发布到测试客户端发布请求中?

如何解决如何将数据发布到测试客户端发布请求中?

我正在编写一个测试,以查看表单数据是否在尝试创建Post对象的post请求中验证。

tests.py

def setUp(self):
    user = User.objects.create_user(email='test@gmail.com',password='test',name='test')
    self.user = User.objects.get(email='test@gmail.com')
    self.client.login(email=user.email,password=user.password)

@tag('fast')
def test_index(self):
    client = Client()
    response = client.post(reverse('index'),data={'user': self.user,'body': 'Test'},follow=True)
    print(response,self.user)
    self.assertTrue(Post.objects.filter(body='Test').exists())

,但是测试失败,并显示消息False is not true,暗示未创建主体为"Test"的对象。我已经尝试使用urlencode对数据进行编码,但这没有帮助。

以下是打印语句显示内容<TemplateResponse status_code=200,"text/html; charset=utf-8"> test

views.py

def index(request):
    posts = Post.objects.all()
    if request.method == 'POST':
        form = NewPostForm(request.POST,request.FILES)
        if form.is_valid():
            new_post = form.save(commit=False)
            new_post.user = user
            new_post.save()
            return redirect('index')
    else:
        form = NewPostForm(instance=None)
    context = {
        'form': form,'posts': posts
    }

    return render(request,'index.html',context=context)

也许用户的序列化不正确,但是当我从data属性中将其删除时(这意味着应该将当前用户分配给Post对象),我得到的结果基本相同。

解决方法

最后,我决定只测试它的有效响应,并将数据验证部分留给表单验证测试,这是现在的样子:

def test_index(self):
    client = Client()
    get_response = client.get('/home/',{},True)
    post_response = client.post(reverse('index'),data={'body': 'Test'},follow=True)
    self.assertEqual(get_response.status_code,200)
    self.assertEqual(post_response.status_code,200)

如果有人有任何建议,我还是希望看到它们,因为我的特殊问题仍然存在。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。