gpt4 book ai didi

python - 如何测试 Django CreateView?

转载 作者:太空宇宙 更新时间:2023-11-03 12:54:46 25 4
gpt4 key购买 nike

我想在Django上练习测试,我有一个要测试的CreateView。该 View 允许我创建一个新帖子,我想检查它是否可以找到没有发布日期的帖子,但首先我要测试带有发布日期的帖子只是为了习惯语法。这是我的:

import datetime
from django.test import TestCase
from django.utils import timezone
from django.urls import reverse
from .models import Post, Comment

# Create your tests here.
class PostListViewTest(TestCase):

def test_published_post(self):
post = self.client.post('/post/compose/', {'author':"manualvarado22", 'title': "Super Important Test", 'content':"This is really important.", 'published_date':timezone.now()})
response = self.client.get(reverse('blog:post_detail'))
self.assertContains(response, "really important")

但是我明白了:

django.urls.exceptions.NoReverseMatch: Reverse for 'post_detail' with no 
arguments not found. 1 pattern(s) tried: ['post/(?P<pk>\\d+)/$']

我如何获得新创建的帖子的 pk?

谢谢!

最佳答案

可以直接从数据库中获取。

请注意,您不应在测试中调用两个 View 。每个测试应该只调用它实际测试的代码,所以这应该是两个独立的 View :一个调用创建 View 并断言条目在数据库中,另一个直接创建条目然后调用详细 View 以检查它是否显示。所以:

def test_published_post(self):
self.client.post('/post/compose/', {'author':"manualvarado22", 'title': "Super Important Test", 'content':"This is really important.", 'published_date':timezone.now()})
self.assertEqual(Post.objects.last().title, "Super Important Test")

def test_display_post(self):
post = Post.objects.create(...whatever...)
response = self.client.get(reverse('blog:post_detail', pk=post.pk))
self.assertContains(response, "really important")

关于python - 如何测试 Django CreateView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47111777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com