在测试Django视图时设置请求对象的属性
我正在为Django中的一个视图函数编写测试。这个视图函数使用了来自pyFacebook库的@facebook.require_login
装饰器。这个装饰器会检查用户是否登录了Facebook,如果登录了,就会提供一个代表Facebook API的对象。这个检查和请求的填充是在某些中间件中完成的。
我想控制视图函数看到的Facebook API内容,所以我尝试使用mock库来模拟Facebook API对象。问题是,Facebook中间件把Facebook API作为请求的一个属性提供给了视图。根据我的了解,Django的测试客户端并不能直接访问请求对象,所以我无法把模拟的Facebook API对象放进视图中。
我能想到的唯一测试方法就是基本上复制测试客户端的大部分代码,并修改它以便在测试运行之前让请求对象对测试代码可用。我对这样做没有问题,但这真的是最好的方法吗?我觉得应该有更简单的方法。
另外,中间件在请求上设置属性是正常的吗?我觉得如果中间件把额外的数据作为额外的参数提供给装饰的函数,会更清晰(在这个例子中,我相信还有其他情况不适用)。
1 个回答
0
你有没有看过 RequestFactory
呢?
[1] http://docs.djangoproject.com/en/dev/topics/testing/#the-request-factory