2014-12-07 126 views
0

我正在嘗試爲我的第一個Django應用程序編寫測試,並且當我瀏覽視圖時,我似乎無法測試對數據庫所做的更改。這是我的一個測試的例子。無法通過Django測試對數據庫的更改測試

def test_vote(self): 
    self.set_up() 
    idea = Idea.objects.get(title="Hello people") 
    c = Client() 
    c.login(email="[email protected]", password="baxter") 
    r = c.post(reverse("ideas:up_vote", kwargs={'pk':idea.pk}), follow=True) 
    self.assertEqual(r.status_code, 200) 
    self.assertEqual(idea.votes, 1) 

該視圖假設up_vote一個想法對象,這是一個簡單的視圖。

def like_view(request, **kwargs): 
    idea = Idea.objects.get(pk = kwargs['pk']) 
    idea.votes += 1 
    idea.save() 

    return HttpResponseRedirect(reverse('ideas:list')) 

我正在使用SQLite3數據庫。

if DEBUG: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.sqlite3', 
      'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
     } 
    } 
else: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.postgresql_psycopg2', 
       'NAME': 'django', 
       'USER': env('RDS_USERNAME'), 
       'PASSWORD': env('RDS_PASSWORD'), 
       'HOST': env('RDS_HOST'), 
       'PORT': '5432', 
     } 
     } 

DEBUG = True也。每次我運行測試時都沒有提到idea.votes = 0而不是1,這就是我想要得到的結果。我不確定我是否正在測試這一切都是錯誤的還是什麼。任何幫助將非常感謝。

回答

1

您需要在調用視圖後刷新測試方法中的投票實例。

idea = Idea.objects.get(pk=idea.pk) 
self.assertEqual(idea.votes, 1)