我在试着测试我的Django 观点.此视图将QuerySet传递给模板:

def merchant_home(request, slug):
  merchant = Merchant.objects.get(slug=slug)
  product_list = merchant.products.all()
  return render_to_response('merchant_home.html',
                            {'merchant': merchant,
                            'product_list': product_list},
                            context_instance=RequestContext(request))

并进行测试:

  def test(self):
    "Merchant home view should send merchant and merchant products to the template"
    merchant = Merchant.objects.create(name='test merchant')
    product = Product.objects.create(name='test product', price=100.00)
    merchant.products.add(product)

    test_client = Client()
    response = test_client.get('/' + merchant.slug)
    # self.assertListEqual(response.context['product_list'], merchant.products.all())
    self.assertQuerysetEqual(response.context['product_list'], merchant.products.all())

EDIT 我用的是self.assertQuerysetEqua升,而不是self.assertListEqual升.遗憾的是,这仍然不起作用,终端显示以下内容: ['<Product: Product object>'] != [<Product: Product object>]


assertListEqual加薪:'QuerySet' object has no attribute 'difference'assertEqual也不工作,尽管self.assertSetEqual(response.context['product_list'][0], merchant.products.all()[0])通过了.

我假设这是因为QuerySet是不同的对象,即使它们包含相同的模型实例.

如何测试两个QuerySet是否包含相同的数据?我的测试是正确的吗?这是我学习Django 的第四天,所以如果可能的话,我想知道最佳实践.谢谢.

推荐答案

使用assertQuerysetEqual,它是为您比较两个查询集而构建的.您需要将Django的django.test.TestCase子类化,才能在测试中使用它.

Django相关问答推荐

Django/SendGrid-密码重置-发件人地址与验证的发件人身份不匹配.";

如何在Django表单中传递self.请求数据?

Django prefetch_related 与 3 个不直接相关的模型

Django rest框架:自定义对象权限不起作用

在 Django 模板中分页时如何正确显示与其父模型字段关联的所有内联字段?

Django REST Framework如何在序列化程序中引发验证错误时指定错误代码

测试 Django ModelForm 是否有实例

手动触发 Django 邮件错误报告

使用 XMLHttpRequest 提示下载文件

创建新内容类型时出错.请确保在try 单独迁移应用程序之前迁移内容类型

Django 删除未使用的媒体文件

如何创建一个在复选框右侧显示复选框标签的 Django 表单?

Django ORM 能否以可靠的与后端无关的方式存储无符号 64 位整数(又名 ulong64 或 uint64)?

在 Django 中使用邮箱地址或用户名登录用户

UpdateView 中的success_url,基于传递的值

访问 django 管理模板中的对象

Django中reverse()和reverse_lazy()的区别

Django - 保存新对象时如何获取 self.id?

确保只有一个工作人员在运行多个工作人员的 pyramid 网络应用程序中启动 apscheduler 事件

如何获取 Django 模型字段对象的值