Django модель тестирования - PullRequest
0 голосов
/ 23 апреля 2020

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

ошибки

Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..E
======================================================================
ERROR: setUpClass (comments.tests.test_models.ReplyCommentModelTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\madas\OneDrive\Pulpit\Code\git-projects\django_tutek\djangoenv\lib\site-packages\django\test\testcases.py", line 1137, in setUpClass
    cls.setUpTestData()
.......
    raise TypeError(
TypeError: Tried to update field comments.ReplyComment.author_reply with a model instance, <User: >. Use a value compatible with CharField.

----------------------------------------------------------------------
Ran 2 tests in 0.170s

FAILED (errors=1)

Тесты

from django.test import TestCase
from django.contrib.auth.models import User

from blog.models import Post, get_default_user
from comments.models import Comment, ReplyComment


class CommentModelTest(TestCase):
    @classmethod
    def setUpTestData(cls):
        cls.user = User(first_name='adam', is_staff=True, is_active=True, is_superuser=True)
        cls.user.save()
        cls.post = Post.objects.create(field='Python', title='Pierwszy post', slug='pierwszy-post', status=1)
        cls.post.save()
        cls.comment = Comment.objects.create(post=Post.objects.get(title='Pierwszy post'), author='robot', text='ok')
        cls.comment.save()

    def setUp(self):
        self.post = Post.objects.get(title='Pierwszy post')
        self.comment = Comment.objects.get(id=1)

    def test_str(self):
        self.assertEqual(self.comment.text, 'ok')

    def test_approve(self):
        self.assertFalse(self.comment.is_approved)
        self.comment.is_approved = True
        self.assertTrue(self.comment.is_approved)


class ReplyCommentModelTest(TestCase):

    @classmethod
    def setUpTestData(cls):
        cls.user = User(first_name='adam', is_staff=True, is_active=True, is_superuser=True)
        cls.user.save()
        cls.post = Post.objects.create(field='Python', title='Pierwszy post', slug='pierwszy-post', status=1)
        cls.post.save()
        cls.comment = Comment.objects.create(post=Post.objects.get(title='Pierwszy post'), author='robot', text='ok')
        cls.comment.save()
        cls.reply_comment = ReplyComment.objects.create(comment_reply=Comment.objects.get(author='robot'), text_reply='not_ok')
        cls.reply_comment.save()

    def setUp(self):
        self.post = Post.objects.get(title='Pierwszy post')
        self.comment = Comment.objects.get(id=1)
        self.reply = ReplyComment.objects.get(id=1)

    def test_str(self):
        self.assertEqual(self.reply.text_reply, 'not ok')

Модели

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from blog import models as blog_models

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

class Comment(models.Model):
    post = models.ForeignKey(blog_models.Post, on_delete=models.CASCADE, related_name='comments')
    author = models.CharField(max_length=10)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    is_approved = models.BooleanField(default=False)

    def __str__(self):
        return self.text[0:20]

    class Meta:
        ordering = ['-created_date']

    def approve(self):
        self.is_approved = True
        self.save()



class ReplyComment(models.Model):
    comment_reply = models.ForeignKey(Comment, on_delete=models.CASCADE, related_name="replies")
    author_reply = models.CharField(default=get_default_user, max_length=10)
    text_reply = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.text_reply[0:20]

У вас есть идея, что случилось? Впервые я пишу тесты в django, так что я в замешательстве. Я также пытался использовать приборы, но я получил сообщение об ошибке postgres. Любые предложения приветствуются. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...