Тестирование Django - аргумент TypeError: int() должен быть строкой, байтовым объектом или числом, а не "пользователем"
Я пишу тестовые случаи для моего первого Django
применение и использование mixer
генерировать случайные значения для некоторых модулей.
Тест-кейс, написанный для тестирования на моделях, похож на
test_model.py
from datetime import datetime, timedelta
from django.core.exceptions import ValidationError
from tzlocal import get_localzone
import pytest
from django.test import TestCase
from mixer.backend.django import mixer
from transactions.models import ModeOfPayment, AmountGiven
pytestmark = pytest.mark.django_db
@pytest.mark.django_db
class TestAmountReturned(TestCase):
def test_model_amount_return_add(self):
amount_returned = mixer.blend(
'transactions.AmountReturned',
amount_given=mixer.blend(
'transactions.AmountGiven',
given_date=datetime.now(get_localzone()) - timedelta(days=300)
),
amount=100.00,
return_date=datetime.now(get_localzone()) - timedelta(days=50)
)
assert str(amount_returned) == str(amount_returned.amount), '__str__ should return amount string'
def test_model_amount_due(self):
amount = 10000.00
interest_rate = 9.5
duration = 365
given_date = datetime.now(get_localzone()) - timedelta(days=200)
returned_amount = 150.00
amount_given = mixer.blend(
'transactions.AmountGiven',
contact=mixer.blend('contacts.Contact'),
amount=amount,
interest_rate=interest_rate,
duration=duration,
given_date=given_date,
mode_of_payment=mixer.blend('transactions.ModeOfPayment', title='Cash')
)
mixer.blend(
'transactions.AmountReturned',
amount_given=amount_given,
amount=returned_amount,
return_date=datetime.now(get_localzone()) - timedelta(days=50)
)
assert amount_given.amount_due == amount_given.total_payable - returned_amount, 'Should return dues amount'
Но при запуске тестирования
pipenv run py.test
Это дает следующую ошибку
______________________________ TestAmountReturned.test_model_amount_due _______________________
self = <django.db.models.fields.AutoField: id>, value = <User: khess>
def to_python(self, value):
if value is None:
return value
try:
> return int(value)
E TypeError: int() argument must be a string, a bytes-like object or a number, not 'User'
../../../.local/share/virtualenvs/koober-py-McGChbzt/lib/python3.6/site-packages/django/db/models/fields/__init__.py:940: TypeError
During handling of the above exception, another exception occurred:
self = <transactions.tests.test_models.TestAmountReturned testMethod=test_model_amount_due>
def test_model_amount_due(self):
amount = 10000.00
interest_rate = 9.5
duration = 365
given_date = datetime.now(get_localzone()) - timedelta(days=200)
returned_amount = 150.00
amount_given = mixer.blend(
'transactions.AmountGiven',
> contact=mixer.blend('contacts.Contact'),
amount=amount,
interest_rate=interest_rate,
duration=duration,
given_date=given_date,
mode_of_payment=mixer.blend('transactions.ModeOfPayment', title='Cash')
)
src/transactions/tests/test_models.py:182:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
расположение ошибки в моем тестовом примере указывает на
contact=mixer.blend('contacts.Contact'),
но не смог выяснить, для какого столбца происходит эта ошибка. Я использовал микшер, чтобы смешать контакты с другими местами также, немногие из них работают нормально.