Тестирование 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'),

но не смог выяснить, для какого столбца происходит эта ошибка. Я использовал микшер, чтобы смешать контакты с другими местами также, немногие из них работают нормально.

0 ответов

Другие вопросы по тегам