2016-02-26 103 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. 
相关问题