您现在的位置是:首页 > 开发类 > 问答问答

在视图中查询时测试数据库为空

2021-11-19 18:47:47问答人已围观

简介在一种情况下,我有条件地检查访问者的注册表数据(通过<code>UserCreationForm</code>的子类)。

如�

在一种情况下,我有条件地检查访问者的注册表数据(通过UserCreationForm的子类)。

如果不存在具有访问者提供的用户名的现有用户,则会创建一个新的User。否则,将检查条件条件,并且访问者会收到一条简短消息(即f"Username {username} exists. Choose another username."

在创建TestCase之后,我已经使用User创建了一个现有的User.objects.create_user()。测试视图时,执行查询User.objects.get()时QuerySet为空。结果,User.DoesNotExist上升了,这不是期望的结果。相反,理想的结果是分支到else子句中。

为什么在将视图填充到User时测试视图时,为什么测试数据库没有setUpTestData实例?

test_views.py

class TestCreateNewChef_Case2(TestCase):

    def setUpTestData(cls):
        User.objects.create_user(
            username='masterchef',
            password='password',

        )
        cls.user_signup_data = {
            'username': 'masterchef',
            'password1': 'secret',
            'password2': 'secret'
        }

        print(User.objects.all()) # <QuerySet [<User: masterchef>]>

    def test_new_chef_sign_up_username_taken(self):
        response = self.client.post(
            reverse("chef:register"), 
            self.user_signup_data,
            follow=True

        )
        self.assertRedirects(response, reverse("chef:register"))
        self.assertTemplateUsed('chef/register_chef.html')
        self.assertContains(
            response,
            "<p>Username masterchef exists. Choose another username.</p>",
            html=True
        )

views.py

def register_chef(request):
    if request.method == 'POST':
        new_user_form = ChefRegisterationForm(request.POST)
        if new_user_form.is_valid():
            try:
                user = User.objects.get(
                    username=new_user_form.cleaned_data['username']
                )
                stored_password = check_password(
                    new_user_form.cleaned_data['check_password'], 
                    user.password
                )
            except User.DoesNotExist:
                # if no Users exist with the username, create a new user
            else:
                # conditionally check existing users with the submitted username

(Pdb) User.objects.all()
<QuerySet []>
(Pdb) n
>(17)register_chef()
-> user = User.objects.get(
(Pdb) n
> (18)register_chef()
-> username=new_user_form.cleaned_data['username']
(Pdb) n
django.contrib.auth.models.DoesNotExist: User matching query does not exist.

最佳答案:

1 个答案:

答案 0 :(得分:0)

您应将setUpTestDataandroid:showAsAction="always" 装饰器一起使用:

classmethod

Tags:python Django Database 

很赞哦! ()

文章评论

留言与评论(共有 0 条评论)
   
验证码:

本栏推荐

站点信息

  • 文章统计921193篇文章
  • 浏览统计28860次浏览
  • 评论统计1个评论
  • 标签管理标签云
  • 统计数据:统计代码
  • 微信公众号:扫描二维码,关注我们