J'ai écrit la fonction send_formatted_email
qui formate le sujet de l'email et le message puis appelle la fonction send_email
dans un module séparé.Mock ne fonctionne pas sur la fonction du module
Maintenant, je dois tester que send_formatted_email
appelle send_email
avec les arguments attendus. A cette fin, je suis en train d'essayer de send_email
en utilisant patch
, mais on ne se moque pas.
test.py
@patch('app.util.send_email')
def test_send_formatted_email(self, mock_send_email):
mock_send_email.return_value = True
response = send_formatted_email(self.comment, to_email)
mock_send_email.call_args_list
....
views.py
def send_formatted_email(comment, to_email):
...
message = comment.comment
subject = 'Comment posted'
from_email = comment.user.email
...
return send_email(subject, message, to_email, from_email)
util.py
def send_email(subject, message, to, from):
return requests.post(
...
)
J'ai même essayé app.util.send_email = MagicMock(return_value=True)
mais cela ne fonctionne pas non plus. Une idée de ce que je fais mal?
Vous appliquez un patch où une fonction est * utilisée *, et non où elle est * définie *. Essayez '@patch ('app.views.send_email')' – jonrsharpe
Copie possible de [Comment simuler une fonction définie dans un module Python séparé en utilisant @patch de mock] (http://stackoverflow.com/questions/14654009/how- to-mock-a-function-defined-in-a-separate-python-module-using-mocks-patch) – jonrsharpe
@jonrsharpe Merci, ça a marché. –