Django тестирует пост обновления - PullRequest
0 голосов
/ 19 декабря 2018

Я получаю это сообщение "feed.models.Post.DoesNotExist: Запрос на сопоставление сообщения не существует".Я полагаю, что это в классе UpdatePost, я не понимаю, поскольку есть сообщение, созданное с идентификатором единицы.Почему это?Изменить: я добавил удалить, чтобы полностью проверить функциональность CRUD

from django.test import TestCase, SimpleTestCase
from django.contrib.auth.models import User
from django.urls import reverse

from feed.models import Post

class Setup_Class(TestCase):

 def setUp(self):
    self.user = User.objects.create_user(username='jtur', email='jtur@accenture.com', password='onion')
    user = User.objects.first()
    Post.objects.create(title='test', content='more testing', author=user)

class PostTests(Setup_Class):

 def test_content(self):
    post = Post.objects.get(id=1)
    expected_post_title = f'{post.title}'
    expected_post_content = f'{post.content}'
    self.assertEquals(expected_post_title, 'test')
    self.assertEquals(expected_post_content, 'more testing')

 def test_post_list_view(self):
    response = self.client.get(reverse('feed-home'))
    self.assertEqual(response.status_code, 200)
    self.assertContains(response, 'more testing')
    self.assertTemplateUsed(response, 'feed/home.html')

class UpdatePost(Setup_Class):
  def test_post_update(self):
    post = Post.objects.first()
    post.title = "This has been changed"
    expected_post_title = f'{post.title}'
    self.assertEquals(expected_post_title, 'This has been changed')

 def test_post_updated_view(self):
    response = self.client.get(reverse('feed-home'))
    self.assertEqual(response.status_code, 200)
    self.assertContains(response, 'This has been changed')
    self.assertTemplateUsed(response, 'feed/home.html')

class DeletePost(Setup_Class):
 def test_post_delete(self):
    post = Post.objects.first()
    post.delete()
    val = False

    if post is None:
        val = True
    else:
        val = False

    self.assertTrue(val)

 def test_post_list_view(self):
    response = self.client.get(reverse('feed-home'))
    self.assertEqual(response.status_code, 200)
    self.assertNotContains(response, 'test')
    self.assertTemplateUsed(response, 'feed/home.html')

1 Ответ

0 голосов
/ 19 декабря 2018

Нет причин предполагать, что пост, созданный в вашем методе setUp, будет иметь id = 1.На самом деле, это, вероятно, не произойдет после первого запуска ваших тестов.Даже если база данных очищается после каждого запуска, последовательности обычно не сбрасываются.

Вместо этого вы должны получить первое сообщение с Post.objects.first().

(Обратите внимание, что ваши методы test_content и test_post_updateдовольно бессмысленны, они вызывают только встроенную функциональность Django, которую вам не нужно тестировать. Ваши тесты должны быть направлены на тестирование функциональности вашего приложения, например просмотров, которые обновляют или отображают сообщения.)

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