Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django::在测试中调用中间件_Django_Testing_Django Testing - Fatal编程技术网

django::在测试中调用中间件

django::在测试中调用中间件,django,testing,django-testing,Django,Testing,Django Testing,我有一个中间件函数,它定义了request.foo。我想测试的函数取决于中间件定义的foo。既然中间件在测试期间没有运行,我该如何测试上述功能 确实应该有一个函数,它接收一个请求,按顺序通过所有中间件运行该请求,然后吐出最后的请求(就像传递给视图时一样)。这样的功能存在吗 我可以手动调用中间件函数,但这似乎是一个黑客行为。如果被测试的中间件依赖于另一个中间件呢?我会遇到“地狱” 中间件功能: class FooMiddleware(): def process_request(self

我有一个中间件函数,它定义了
request.foo
。我想测试的函数取决于中间件定义的foo。既然中间件在测试期间没有运行,我该如何测试上述功能

确实应该有一个函数,它接收一个请求,按顺序通过所有中间件运行该请求,然后吐出最后的请求(就像传递给视图时一样)。这样的功能存在吗

我可以手动调用中间件函数,但这似乎是一个黑客行为。如果被测试的中间件依赖于另一个中间件呢?我会遇到“地狱”

中间件功能:

class FooMiddleware():
    def process_request(self, request):
        req.foo = True if req.session.get('foo') in [1,2,3,4,5,6,7,8,9,10] else False
下面是我要测试的函数:

def getBaz(request):
    if request.foo == True:
        return something()
    else:
        return somethingElse()
如何测试
getBaz

<可能性> 我可以手动运行中间件:

def test_getBaz(self):
    request = HttpRequest('/blarg')
    request.session['foo'] = 2

    middleware = FooMiddleware()
    request = middleware.process_request(request)

    value = getBaz(request)
    assertEqual( value, expected )
但这似乎是一个黑客。如果被测试的中间件依赖于另一个中间件呢

我已经看到了你的“手动”解决方案,但是我建议你考虑使用这里描述的测试客户端:


关于中间件依赖性,你可以考虑嘲笑中间件。

离我的头顶(我现在不能测试这个想法,但是我有和你一样的问题)。:使用上下文处理器,只返回中间件组件插入的请求变量,这是一种解决方案吗?

我认为这是不够的。使用django客户端会给我一个响应。但是我该怎么处理它呢?我不想对回应做任何事。相反,我有一个方法将自身附加到请求。当django客户端将响应交给我时,我不再有权访问该请求(该请求具有中间件附加的方法)。测试客户端返回的响应确实有权访问该请求。看,我刚刚试过这个,它确实很好用。这感觉不太对劲,但现在对我来说还行。