How do you mock the ReferManager method in Django?

I have a client manager for a Django model that overrides a method createto save some related objects:

class CustomManager(models.Manager):
    def create(self, amount, user, description):
        txn = self.get_query_set().create(user, description)
        txn.budget_transactions.create(amount)
        return txn

My question is: how do I make fun of a call txn.budget_transactions.createto throw an exception?

An attribute of an budget_transactionsobject txnis an instance django.db.models.fields.related.RelatedManager. Using mock.patchto mock this class does not work, because it is declared dynamically - it cannot be imported directly.

Does anyone know how to do this?

+5
source share
1 answer

, Manager -, , django set . , , , , budget_transactions ReferManager. , , get, .

:

@mock.patch('django.db.models.fields.related.ForeignRelatedObjectsDescriptor.__get__')
def test_campaign_cancel(self, mock_manager):
    mock_manager.return_value = mock.MagicMock()
    mock_manager.return_value.create = Exception('Boom!')

, , django, ALL ReferManagers . , , , .

+5
source

All Articles