我试图模拟 django.contrib.auth 验证方法的返回值,该方法在视图的登录方法中调用。
有view.py代码:
def login(request):
if request.method == 'POST':
username = get_username(request.POST.get('email'))
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user:
if user.is_active:
if not request.POST.get('remember_me', None):
request.session.set_expiry(0)
auth_login(request, user)
return redirect('/')
else:
return redirect('/') # some error page
else:
return redirect('/') # error again
else:
return render(request, 'auth/login.html')
以及 test.py 代码:
from django.contrib import auth
...
@patch.object(auth, 'authenticate')
def test_login_missing_user(self, mock_auth):
request = self.request_factory.post('', data={'email': u'[email protected] /cdn-cgi/l/email-protection', 'password': u'PA$$WORD'})
self.assertIsInstance(login(request), HttpResponse) #this test PASSES
user = User.objects.create_user('test_user', '[email protected] /cdn-cgi/l/email-protection', 'test_password')
mock_auth.return_value = True
login(request)
self.assertTrue(mock_auth.called)
最后一个断言失败并出现 AssertionError: False is not true
你正在修补错误的东西:你所做的只是改变什么authenticate
指的是您的测试中,而不是视图中。你应该打补丁your_view.auth.authenticate
.
请参阅模拟文档哪里打补丁 http://mock.readthedocs.org/en/latest/patch.html#where-to-patch.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)