Django ошибка теста в командной строке: соответствующий запрос не существует - PullRequest
0 голосов
/ 16 марта 2020

Это мой tests.py файл:

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

class ArticleTestCase(TestCase):

    @classmethod
    def setup(self):
        Article.objects.create(
            article_title="title1",
            article_content="content of article",
        )

    def test_article_title(self):
        a1 = Article.objects.get(pk=1)
        article_name = a1.article_title
        self.assertEquals(article_name, 'title1')

Но я всегда получаю эту ошибку:

Traceback (most recent call last):
File "F:\Django_Blog_Live\swagato_blog_site\blog_api\tests.py", line 16, in test_article_title
a1 = Article.objects.get(pk=1)
File "F:\Django_Blog_Live\env\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
File "F:\Django_Blog_Live\env\lib\site-packages\django\db\models\query.py", line 415, in get
raise self.model.DoesNotExist(
blog_api.models.Article.DoesNotExist: Article matching query does not exist.

И описание ошибки указывает на это утверждение: a1 = Article.objects.get(pk=1)

Что я делаю не так?

1 Ответ

1 голос
/ 16 марта 2020

setup не является правильным именем для метода. Правильное имя setUp (обратите внимание на заглавную U). И это не a classmethod.

Есть еще один метод, называемый setUpClass, который равен a classmethod.

Разница между ними заключается в том, что setUp запускается перед каждым методом тестирования, тогда как setUpClass запускается один раз для всего теста.

Использование :

Использование метода setUp является простым:

class ArticleTestCase(TestCase):
    def setUp(self):
        # create objects
        # ...

В Django, если вы используете setUpClass, вам также необходимо сделать super вызов родительский класс:

class ArticleTestCase(TestCase):
    @classmethod
    def setUpClass(cls):
        super().setUpClass() # call parent

        # create objects
        # ...
...