2016-02-11 2 views
2

В настоящее время я пишу несколько тестов для приложения Django. У меня есть следующие автономные функции в файле signals.py моего приложения:Django TestCase не сохраняет мои модели

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() 

и в моем 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() догоняет мой вновь созданный Период объект в цикле for (я могу видеть, что его данные напечатаны на консоли print period), но мой тест assertEqual() не работает - сообщив мне, что атрибут batch_processed по-прежнему является False.

Это как если бы сделка period.save() не была вызвана.

Я знаю, что в версиях Django до 1.8 вам нужно будет использовать класс TransactionTestCase, но сейчас я запускаю 1.8.3 для этого проекта, поэтому я не считаю, что это проблема ,

Есть ли что-то, что я должен сделать, чтобы TestCases правильно отразили действие model.save(), которое я выполняю в этой функции, и, следовательно, эта функция покрыта тестами?

+0

Это не имеет ничего общего с тестами. 'p' - это просто не тот объект, который был сохранен в' updateLeaveCounts'. –

ответ

4

Попробуйте использовать refresh_from_db:

# ... 
updateLeaveCounts() 
p.refresh_from_db() 
self.assertEqual(p.batch_processed, True) 
# ... 
+0

Спасибо Владимиру! Вы знаете, есть ли причина, почему это не делается автоматически при использовании тестовой среды? Я не мог видеть, что это документировано где-либо в документах Django. – jamesk5

Смежные вопросы