2016-02-11 99 views
2

我目前正在爲Django應用程序編寫一些測試。我有我的應用程序的signals.py文件以下獨立功能:Django TestCase不保存我的模型

def test_johnsPostLeaveCounters(self): 
    # Some setup here 
    p = Period.objects.create(request=request,start=datetime(today.year,today.month,today.day,9),end=datetime(today.year,today.month,today.day,16,30),length='whole') 
    updateLeaveCounts() 
    self.assertEqual(p.batch_processed,True) 

updateLeaveCounts()正趕上我的新創建的時期:

def updateLeaveCounts(): 
    # Setting some variables here 
    todaysPeriods = Period.objects.filter(end__lte=today_end, end__gte=today_start).filter(request__leavetype="AN") 
    for period in todaysPeriods: 
     print period 
     counter = LeaveCounter.objects.get(pk=period.request.submitter) 
     # some Logic here 
     period.batch_processed = True 
     period.save() 

,並在我的測試用例,我如下調用它對象在for循環中(我可以通過print period看到它的詳細信息打印到控制檯),但是我的assertEqual()測試失敗 - 告訴我batch_processed屬性仍然是False。

就好像沒有調用period.save()事務。

我知道,在1.8之前的Django版本中,您必須使用TransactionTestCase類,但此刻我正在爲此項目運行1.8.3,所以我不認爲這是問題所在。

有什麼我需要做的,讓TestCases正確地反映我在這個函數中執行的model.save()動作,因此這個函數被測試覆蓋了嗎?

+0

這是無關的測試。 'p'與保存在'updateLeaveCounts'中的對象不是同一個對象。 –

回答

4

嘗試使用refresh_from_db

​​
+0

謝謝弗拉基米爾!你知道在使用測試框架時爲什麼沒有自動完成這個任務嗎?我無法在Django文檔中的任何地方看到這一點。 – jamesk5