如何在Django中测试修改数据库数据的视图?

时间:2014-10-01 01:17:12

标签: django unit-testing

我正在尝试测试一个视图,该视图会更改数据库中对象的状态,然后将其保存回来。问题是我无法使用我的单元测试来处理这个视图,即使我尝试使用我的真实数据库查看它也能很好地工作。

这是观点:

@login_required
def publicar_investigacion(request,id):
    context = RequestContext(request)

    try:
        inv = Investigacion.objects.get(pk=id)
        inv.estado = 1
        inv.save()
    except Investigacion.DoesNotExist:
        pass

    return HttpResponseRedirect('/admin/guatepediaapp/investigacion')

这是我的单元测试:

   def test_ResultAprobarInvestigacion(self):
        inv = Investigacion.objects.create(pk=100,fecha=timezone.now())
        request = RequestFactory()

        user = User.objects.create_user(
            username='pablo', email='sib@ho.com', password='miSuperContraseniaa secreta')
        request.user = user

        response = v.publicar_investigacion(request,100)


        self.assertEqual(inv.estado, 1)

值得一提的是,当我创建一个Investigacion时,变量estado的默认状态为2

这是我在运行测试时得到的结果:

   Failure
Traceback (most recent call last):
  File "C:\xampp\htdocs\guatepedia\guatepedia\Guatepedia\guatepediaapp\tests.py", line 34, in test_ResultAprobarInvestigacion
    self.assertEqual(inv.estado, 1)
AssertionError: 2 != 1

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

测试中的inv变量和视图中的变量不一样,即使它们引用相同的数据库行:对另一个的更改也不会显示在另一个中。 调用测试后,您需要在测试中加载一个:将inv = Investigacion...行向下移动到response行之后。

答案 1 :(得分:0)

我的猜测是提出了Investigacion.DoesNotExist异常。你可以尝试这个,而不是硬编码PK。

   def test_ResultAprobarInvestigacion(self):
        inv = Investigacion.objects.create(fecha=timezone.now())
        request = RequestFactory()

        user = User.objects.create_user(
            username='pablo', email='sib@ho.com', password='miSuperContraseniaa secreta')
        request.user = user

        response = v.publicar_investigacion(request,inv.id)


        self.assertEqual(inv.estado, 1)