tengo el siguiente escenario:que imita Django modelo y save()
en mi models.py
class FooBar(models.Model):
description = models.CharField(max_length=20)
en mi archivo utils.py.
from models import FooBar
def save_foobar(value):
'''acts like a helper method that does a bunch of stuff, but creates a
FooBar object and saves it'''
f = FooBar(description=value)
f.save()
en tests.py
from utils import save_foobar
@patch('utils.FooBar')
def test_save_foobar(self, mock_foobar_class):
save_mock = Mock(return_value=None)
mock_foobar_class.save = save_mock
save_foobar('some value')
#make sure class was created
self.assertEqual(mock_foobar_class.call_count, 1) #this passes!!!
#now make sure save was called once
self.assertEqual(save_mock.call_count, 1) #this fails with 0 != 1 !!!
Ésta es una versión simplificada de lo que estoy tratando de hacer ... así que por favor no te hungup sobre por qué tengo un archivo de utilidades y una función auxiliar para esto (en la vida real hace varias cosas). Además, tenga en cuenta que, aunque simplificado, este es un ejemplo real de mi problema. La primera llamada para probar call_count devuelve 1 y pasa. Sin embargo, el segundo devuelve 0. Por lo tanto, parece que mi parche está funcionando y recibiendo una llamada.
¿Cómo puedo comprobar que no solo se crea una instancia de FooBar, sino también que se llama al método de salvar?
¡Me ganas con la respuesta! – fuzzyman
Votación a favor para responder a mi consulta! ¡Muchas gracias! –
@matthew! ¡Muchas gracias! –