Django测试-使用经过身份验证的用户访问站点

ss2ws0br  于 2023-04-07  发布在  Go
关注(0)|答案(2)|浏览(128)

我试图做一个单元测试验证用户url访问,目前我试图验证一个用户,但我无法这样做...
Test.py

def setUp(self):
    self.user = User.objects.create_user(email='test@testmail.com', password='test_password', is_staff=True)
    self.user.save()

    self.client = Client()

def test_portfolio_url(self):
    self.client.login(username='test@testmail.com', password='test_password')

    url = reverse('portfolio')
    response = self.client.get(url)
    self.assertEqual(response.status_code, 200)
    self.assertEqual(resolve(url).func, portfolio)
    self.assertTemplateUsed(response, 'portfolio.html')

views.py

@login_required(login_url='login')
def portfolio(request, user_id=None):
    if user_id and request.user.is_staff:
        user = User.objects.get(id=user_id)
    else:
        ...
    return render(request, 'portfolio.html', {'portfolio': portfolio_data})

这是我在登录时应该得到的响应

bvpmtnay

bvpmtnay1#

  • setUp()中,您创建了一个没有用户名用户
  • test_portfolio_url()中,您尝试使用用户名登录,但使用电子邮件。
  • setUp()中,您不需要调用user.save()-create_user()调用已经保存了用户
w46czmvw

w46czmvw2#

有点晚了,但我发现这个问题的解决方案可能会对某些人有帮助..所以我在类中为每个需要验证用户身份的测试/视图创建了函数,在这里。

def login(self):
    self.username = 'test1'
    self.password = '12345qwe'
    user = ModelUser.objects.create_user(username=self.username)
    user.set_password(self.password)
    user.save()
    client = Client()
    client.login(username=self.username, password=self.password)
    return user, client

在测试中,你只需要像这样调用函数:

user, client = self.login()

这里你已经设置好了用户和客户端,你可以继续例如使用response = client. get...当然你可以根据自己的喜好来改进代码,祝你好运!

相关问题