2014-10-01 68 views
0

我試圖測試一個視圖,該視圖改變了數據庫中對象的狀態,然後將其保存回來。問題是,我不能讓我的單元測試使用這個視圖,即使如果我用我的真實數據庫嘗試視圖,它完美的工作。如何測試在Django中修改數據庫數據的視圖?

這是視圖:

@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='[email protected]', password='miSuperContraseniaa secreta') 
     request.user = user 

     response = v.publicar_investigacion(request,100) 


     self.assertEqual(inv.estado, 1) 

It's值得一提的是,可變埃斯塔的defaul狀態時我創建Investigacion是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 

感謝您的幫助

回答

1

在測試的inv變量和一個在視圖中是不一樣的,即使他們是指相同的數據庫行:改變一個不會在其他顯示。您需要在調用測試之後加載測試中的一個:將inv = Investigacion...一行向下移至response行之後。

+0

你好。我不認爲我可以這樣做,因爲如果我在視圖之後創建對象,我不會有任何ID發送到視圖。但是也許我沒有正確理解您的答案。感謝您的幫助 – 2014-10-01 18:30:05

+0

好,好點。在這種情況下,您需要在調用視圖後重新加載它,方法是執行'inv = Investigacion.objects.get(pk = inv.pk)'。 – 2014-10-01 18:45:34

+0

非常感謝!它工作完美:) – 2014-10-03 17:02:50

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='[email protected]', password='miSuperContraseniaa secreta') 
     request.user = user 

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


     self.assertEqual(inv.estado, 1) 
+0

感謝您的回答,但我仍然得到同樣的錯誤。 – 2014-10-01 18:27:28