我正在编写一个登录 View ,并想为该 View 添加单元测试。我的观点如下:
def login(request):
if request.POST:
usrname = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=usrname, password=password)
if user is not None:
auth_login(request, user)
return redirect('/core/home/')
else:
context = {'error_message': "Invalid username or password"}
return render(request, 'core/login.html', context)
else:
c = {}
c.update(csrf(request))
return render_to_response('core/login.html',c)
def home(request):
if request.user.is_authenticated():
context = {'user' : request.user}
return render(request, 'core/home.html', context)
else:
return render(request, 'core/login.html')
我的单元测试如下所示:
class CoreViewTests(TestCase):
def setUp(self):
self.factory = RequestFactory()
def test_login_view_with_valid_user(self):
uf = UserFactory()
user = uf.make_user("ValidUser1", "12345", "user@abc.com")
self.assertEqual(user.username, "ValidUser1")
request = self.factory.post('/core/login', {"username": "ValidUser1", "password": "12345"})
response = login(request)
self.assertEqual(response.status_code, 200)
单元测试崩溃,因为找不到 session 对象。我按照网站上的几个教程定义了一个虚拟 session 字典,但这没有帮助。
任何人都可以告诉我如何为需要处理 session 对象的 View 编写单元测试吗?
谢谢。
最佳答案
来自 RequestFactory
对象的文档:
It does not support middleware. Session and authentication attributes must be supplied by the test itself if required for the view to function properly.
您可以尝试手动将 request.session
设置为包含适当内容的字典,正如您所说。使用老式的 Django test client 可能会更容易不过。
关于django - 在 Django 单元测试中使用 session 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14714585/