python - 我应该如何使用独特的 slug 测试 Django View

标签 python django unit-testing testing

我尝试将 tests.py 写入我的 View 。

我对编写一个好的测试以使用 slug 查看有疑问。

views.py:

def post_detail(request, slug):
    post = Post.objects.get(slug=slug)
    context = {'post': post}
    template = 'post/post_detail.html'
    return render(request, template, context)

Url 看起来像:post/slug_name,而 slug 对于每个帖子都是唯一的。

我尝试:

测试.py

class PostDetailTestCase(TestCase):
    def test_post_detail_(self):
        test = Post(title='poost', description="posting", category="letstest", slug='django')
        response = self.client.get(reverse('board_detail', args=(self.slug,)))
        self.assertEqual(response.status_code, 200)

运行测试错误:

    response = self.client.get(reverse('post_detail', args=(self.slug,
AttributeError: 'PostDetailTestCase' object has no attribute 'slug'

我应该如何修复它?提前致谢。

最佳答案

在 tests.py 中,self 当前引用类 PostDetailTestCase 并且该类没有 slug。您几乎已经在数据库中创建了一个 django 可以访问的帖子。

然而,您需要做的是使用以下内容。您需要按以下方式使用 objects.create 方法。

test = Post.objects.create(
    title='poost', 
    description="posting", 
    category="letstest", 
    slug='django'
)

如果您随后将 self 替换为 test ,事情应该会成功。

response = self.client.get(reverse('board_detail', args=(test.slug,)))

关于python - 我应该如何使用独特的 slug 测试 Django View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46131478/

相关文章:

java - 有没有办法在 Mockito 运行的测试中 AutoWire WebApplicationContext

python - 使用字符串模板在python中制作quine?

Django:创建类似于管理界面的内联表单集

django - 如何从 Django 的 session 中获取登录用户的 uid?

javascript - 在 NodeJS 中运行单元测试时,如何将服务需求更改为模拟需求

java - 静态初始化程序在 JUnit 测试期间不运行

python - Pyaudio 如何仅在一个扬声器上播放声音

python - HTTP/1.1 中的 400 Bad Request 但 HTTP/1.0 中没有

python - 如何指示函数应该使用可选参数的默认值而不省略它?

django - 使用 Fabric 的 INSTALLED_APPS 本地设置