2016-02-26 105 views
2

我想寫一些測試我的Django的應用程序,它拋出了一個錯誤:Django的測試例錯誤「WSGIRequest」對象有沒有屬性「會議」

File "/Users/croberts/.virtualenvs/litem/lib/python3.4/site-packages/django/contrib/auth/__init__.py", line 101, in login 
    if SESSION_KEY in request.session: 
AttributeError: 'WSGIRequest' object has no attribute 'session' 

這裏是我的代碼,我想運行:

class SimpleTest(TestCase): 
    def setUp(self): 
     self.request_factory = RequestFactory() 

    def test_signup(self): 
     request = self.request_factory.post("/signup/", { 
      "email": "[email protected]", 
      "password": "password", 
      "password-confirm": "password", 
      "firm": "big law firm"}) 
     response = signup_user(request) 
     user = User.objects.get(email="[email protected]") 
     self.assertEqual(user.username, "[email protected]") 
     self.assertEqual(user.firm, "big law firm") 
     self.assertEqual(response.status_code, 302) #if it's successful it redirects. 

這裏是我的中間件的:

MIDDLEWARE_CLASSES = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 

和我安裝的應用程序:

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'patents', 
] 
+0

我剛剛更新了這個問題。它在setUp方法中設置。 –

回答

6

嘗試使用測試客戶端而不是請求工廠。這也有測試你的URL配置的好處。

class SimpleTest(TestCase): 
    def test_signup(self): 
     response = self.client.post("/signup/", { 
      "email": "[email protected]", 
      "password": "password", 
      "password-confirm": "password", 
      "firm": "big law firm"}) 
     user = User.objects.get(email="[email protected]") 
     self.assertEqual(user.username, "[email protected]") 
     self.assertEqual(user.firm, "big law firm") 
     self.assertEqual(response.status_code, 302) #if it's successful it redirects. 
相關問題