Django Модель unittest - PullRequest
       3

Django Модель unittest

0 голосов
/ 23 апреля 2020

Доброе утро! Я пытаюсь написать тесты для своего приложения, но, к сожалению, что-то все время ломается. Несмотря на то, что я создаю экземпляр модели Post, я все еще получаю ту же ошибку.

ошибка

ERROR: setUpClass (blog.tests.test_models.PostModelTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\madas\OneDrive\Pulpit\Code\git-projects\django_tutek\djangoenv\lib\site-packages\django\db\models\base.py", line 456, in __init__
    rel_obj = kwargs.pop(field.name)
KeyError: 'author'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\madas\OneDrive\Pulpit\Code\git-projects\django_tutek\djangoenv\lib\site-packages\django\db\models\base.py", line 461, in __init__
    val = kwargs.pop(field.attname)
KeyError: 'author_id'

модель

def get_default_user():
    return User.objects.get(is_superuser=True)

class Post(models.Model):
    field = models.TextField(choices=TOPIC, default='N/A')
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(max_length=200, unique=True, null=False)
    author = models.ForeignKey(User, on_delete= models.CASCADE, default=get_default_user)
    content = RichTextUploadingField()
    img = ResizedImageField(size=[1600, 1200], upload_to='post_pics', default='default.jpg')
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=0)

    class Meta:
        ordering = ['-created_on']

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post_detail', kwargs={'slug': self.slug})

тесты

from django.test import TestCase

from blog.models import Post

class PostModelTest(TestCase):

    @classmethod
    def setUpTestData(cls):
        Post.objects.create(field='Python', title='Pierwszy post', slug='pierwszy-post', status=1)

    def setUp(self):
        self.post = Post.objects.get(title='Pierwszy post')

    def test_author(self):
        self.assertEqual(self.post.author == 'adam')

ОБНОВЛЕНИЕ Так что я понял, что случилось. Я забыл, что unittest создает собственную базу данных, поэтому я не могу получить пользователя по умолчанию. Мне нужно было создать собственный экземпляр User для проверки правильности работы функции

from django.test import TestCase
from django.contrib.auth.models import User
from blog.models import Post, get_default_user

class PostModelTest(TestCase):

    @classmethod
    def setUpTestData(cls):
        user = User(first_name='adam', is_staff=True, is_active=True, is_superuser=True)
        user.save()
        Post.objects.create(field='Python', title='Pierwszy post', slug='pierwszy-post', status=1, author=user)

    def setUp(self):
        self.post = Post.objects.get(title='Pierwszy post')

    def test_author(self):
        self.assertEqual(self.post.author,'adam')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...