CanonPerson
次のモデルをモックしたい
def compute(self, is_send_emails, test_email_address):
cpses = CanonPerson.objects.filter(persons__vpd=6,
persons__country="United States",
persons__role__icontains=';IX;').prefetch_related("persons").using("global")
for cp in cpses:
...
CanonPerson.objects.filter
継続できるように、相互利用可能なコレクションを返すためにモックする方法がまったくわかりません。
これは私がこれまでに行ったことです:
def test_X_count(self):
with mock.patch('apps.dbank.models.CanonPerson.objects.filter') as canon_patch:
mock_cp = mock.MagicMock(spec=CanonPerson)
mock_person = mock.MagicMock(spec=Person)
mock_person.vpd = 6
mock_cp.country = "United States"
mock_cp.role = ";IX;"
mock_cp.persons.add(mock_person)
canon_patch.objects.filter.return_value = [mock_cp] // ???
oi = OptinInvites()
oi.compute(False, None)
oi.get_most_recent_email.assert_called_once_with(1)
私が見ることができる計算関数にcpses
は、MagicMock タイプがあります。ただし、それは反復可能ではなく、for loop
その後、それを飛び越えるだけです。戻り値を[mock_cp]
に設定することで、反復可能なリストを作成したと思いましたか?