访问django测试中登录用户的视图



我试图为我的django项目创建一些测试。当尝试进行视图测试时,我得到了多个错误。我的大多数视图依赖于用户登录,我找不到登录的方式。我使用的是django内置的AUTH系统。
VIEW:

@login_required
def fields(request):
if request.user.profile.user_package == "Livestock":
raise PermissionDenied()
field_list = Field.objects.filter(user = request.user)
context = {
"title": "Fields",
"field_list" : field_list,
}
template = 'agriculture/fields.html'
return render(request, template, context)

TetCase:

class TestViews(TestCase):
@classmethod
@factory.django.mute_signals(signals.pre_save, signals.post_save, signals.pre_delete, signals.post_delete)
def setUpTestData(cls):
# Create new user 
test_user = User.objects.create(username='test_user',password='1XISRUkwtuK')
test_user.save()
c = Client()
profile = Profile.objects.get_or_create(user = test_user, user_package = 'hybrid')
c.login(username = test_user.username, password = test_user.password)
Field.objects.create(user=test_user,friendly_name='Arnissa')                                                                                         

def test_logged_in_user(self):
login = self.client.login(username='test_user', password='1XISRUkwtuK')
response = self.client.get(reverse('agriculture:fields'))
# Check our user is logged in
self.assertEqual(str(response.context['user']), 'test_user')
# Check that we got a response "success"
self.assertEqual(response.status_code, 200)

路径:path('fields', views.fields, name='fields')

和设置,如果它们提供任何帮助:

LOGIN_REDIRECT_URL = 'dashboard:index'
LOGOUT_REDIRECT_URL = 'login'
LOGIN_URL = 'login'

在我的测试中,当我检查用户是否登录时,我得到错误TypeError: 'NoneType' object is not subscriptable。如果我尝试得到响应,我得到AssertionError: 302 != 200

在Django中创建User时,你不应该使用User manager的create方法,因为这会将密码设置为纯文本而不是加密。尝试使用create_user方法创建用户,如下所示:

test_user = User.objects.create_user(username='test_user',password='1XISRUkwtuK')

如果您不希望使用这种方法,您可以使用force_login客户端方法登录用户,而不必指定登录名和密码,如:

c.force_login(test_user)

最新更新