在测试Django视图时设置请求对象的属性

0 投票
1 回答
1788 浏览
提问于 2025-04-16 12:33

我正在为Django中的一个视图函数编写测试。这个视图函数使用了来自pyFacebook库的@facebook.require_login装饰器。这个装饰器会检查用户是否登录了Facebook,如果登录了,就会提供一个代表Facebook API的对象。这个检查和请求的填充是在某些中间件中完成的。

我想控制视图函数看到的Facebook API内容,所以我尝试使用mock库来模拟Facebook API对象。问题是,Facebook中间件把Facebook API作为请求的一个属性提供给了视图。根据我的了解,Django的测试客户端并不能直接访问请求对象,所以我无法把模拟的Facebook API对象放进视图中。

我能想到的唯一测试方法就是基本上复制测试客户端的大部分代码,并修改它以便在测试运行之前让请求对象对测试代码可用。我对这样做没有问题,但这真的是最好的方法吗?我觉得应该有更简单的方法。

另外,中间件在请求上设置属性是正常的吗?我觉得如果中间件把额外的数据作为额外的参数提供给装饰的函数,会更清晰(在这个例子中,我相信还有其他情况不适用)。

1 个回答

0

撰写回答