【发布时间】:2017-08-16 10:48:28
【问题描述】:
我在1.10 style 中编写了我的自定义 Django 中间件,类似于:
class MyMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
# some initialization stuff here
def __call__(self, request):
# Code executed before view functions are called.
# Purpose of this middeware is to add new attribute to request
# In brief:
request.new_attribute = some_function_returning_some_object()
response = self.get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
请注意,这个中间件作为一个单独的 Python 模块受到威胁,它不属于我项目中的任何特定应用程序,而是存在于外部并像任何其他包一样通过 pip 安装。它本身不起作用,但只有安装在 Django 应用程序中。
它工作正常,但是,我想对其进行测试。到目前为止,我在my_tests.py 中所做的是这样的:
from my_middleware_module import MyMiddleware
# some @patches
def test_mymiddleware():
request = Mock()
assert hasattr(request, 'new_attribute') is False # passes obviously
# CALL MIDDLEWARE ON REQUEST HERE
assert hasattr(request, 'new_attribute') is True # I want it to pass
我不知道如何在request 变量上调用中间件来修改它。我认为如果我使用类似函数的中间件样式会容易得多,但是如果我坚持我所拥有的并且我应该只编写测试而不修改中间件怎么办?
【问题讨论】:
标签: python django testing django-middleware django-1.10