Django单元测试中间件报错
Django unit testing middleware error
这是我的中间件-
class HeadersControlMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
response['Cache-Control'] = "no-cache"
# Code to be executed for each request/response after
# the view is called.
return response
这是我的单元测试 -
class TestHeadersControlMiddleware(MyAPITestCase):
def dummy_middleware(self):
response = Response()
response.status_code = 200
response.json = {"key1": "value1"}
return response
def test_cache_control_header_is_added(self):
self.middleware = HeadersControlMiddleware(self.dummy_middleware())
self.request = RequestFactory()
self.request.META = {
"REQUEST_METHOD": "POST",
"HTTP_APP_VERSION": "1.0.0",
"HTTP_USER_AGENT": "AUTOMATED TEST"
}
self.request.path = '/testURL/'
self.request.session = {}
response = self.middleware(self.request)
print(str(response['Cache-Control']))
当 运行 测试时出现以下错误:
File ".../tests/test_headers_control_middleware.py", line 56, in test_cache_control_header_is_added
response = self.middleware(self.request)
File "..../api/headers_control_middleware.py", line 10, in __call__
response = self.get_response(request)
TypeError: 'Response' object is not callable
有什么想法吗?
编辑 -
显然,我在 'dummy_middleware' 中返回了 'Response' 而不是 'response' (感谢@szymon 注意到)。所以我修复了它并更新了当前的错误和问题。
您的 dummy_middleware
方法应将 request
作为参数。我会把它移到测试用例之外,这样你就不用担心 self
.
def dummy_middleware(request):
response = Response()
response.status_code = 200
response.json = {"key1": "value1"}
return response
然后你应该用 dummy_middleware
初始化中间件,而不是像你现在那样 dummy_middleware()
。
self.middleware = HeadersControlMiddleware(dummy_middleware)
...
response = self.middleware(self.request)
这是我的中间件-
class HeadersControlMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
response['Cache-Control'] = "no-cache"
# Code to be executed for each request/response after
# the view is called.
return response
这是我的单元测试 -
class TestHeadersControlMiddleware(MyAPITestCase):
def dummy_middleware(self):
response = Response()
response.status_code = 200
response.json = {"key1": "value1"}
return response
def test_cache_control_header_is_added(self):
self.middleware = HeadersControlMiddleware(self.dummy_middleware())
self.request = RequestFactory()
self.request.META = {
"REQUEST_METHOD": "POST",
"HTTP_APP_VERSION": "1.0.0",
"HTTP_USER_AGENT": "AUTOMATED TEST"
}
self.request.path = '/testURL/'
self.request.session = {}
response = self.middleware(self.request)
print(str(response['Cache-Control']))
当 运行 测试时出现以下错误:
File ".../tests/test_headers_control_middleware.py", line 56, in test_cache_control_header_is_added
response = self.middleware(self.request)
File "..../api/headers_control_middleware.py", line 10, in __call__
response = self.get_response(request)
TypeError: 'Response' object is not callable
有什么想法吗?
编辑 - 显然,我在 'dummy_middleware' 中返回了 'Response' 而不是 'response' (感谢@szymon 注意到)。所以我修复了它并更新了当前的错误和问题。
您的 dummy_middleware
方法应将 request
作为参数。我会把它移到测试用例之外,这样你就不用担心 self
.
def dummy_middleware(request):
response = Response()
response.status_code = 200
response.json = {"key1": "value1"}
return response
然后你应该用 dummy_middleware
初始化中间件,而不是像你现在那样 dummy_middleware()
。
self.middleware = HeadersControlMiddleware(dummy_middleware)
...
response = self.middleware(self.request)