2015-07-13 131 views
0

我試圖模擬在視圖的登錄方法內調用的django.contrib.auth驗證方法的返回值。Django驗證單元測試

還有的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]', 'password': u'PA$$WORD'}) 
    self.assertIsInstance(login(request), HttpResponse) #this test PASSES 

    user = User.objects.create_user('test_user', '[email protected]', 'test_password') 

    mock_auth.return_value = True 
    login(request) 
    self.assertTrue(mock_auth.called) 

最後斷言失敗,AssertionError錯誤:錯誤是不正確的

回答

1

你修補錯誤的東西:你所做的只是改變authenticate在你的測試中引用的內容,而不是在視圖中。你應該補丁your_view.auth.authenticate

請參閱模擬文檔Where to patch