Python 在棱锥视图测试中获取当前路由

Python 在棱锥视图测试中获取当前路由,python,testing,pyramid,Python,Testing,Pyramid,我正在尝试测试金字塔中的一个视图,它使用request.current\u route\u path() 我将使用基本的测试设置,非常直接地从文档: from ..views.auth import signup ... class ....: def test_signup_view(self): with testing.testConfig(): signup(testing.DummyRequest(self.session)) 我使用的

我正在尝试测试金字塔中的一个视图,它使用
request.current\u route\u path()

我将使用基本的测试设置,非常直接地从文档:

from ..views.auth import signup
...
class ....:
    def test_signup_view(self):
        with testing.testConfig():
            signup(testing.DummyRequest(self.session))
我使用的配置类似于:

但这会导致
ValueError:当前请求不匹配任何路由

我将
path=“/signup”
参数添加到
DummyRequest
,但最终还是出现了相同的错误

我的路由基于URI,而不是基于资源,因此测试的具体路由是:

def includeme(config):
    ...
    config.add_route('signup', '/signup')
    ...

如何解决这个问题?

通过
DummyRequest
模拟
当前路由路径并不十分容易,因为它依赖于一个名为
matched\u route
object附加到它的
matched\u route
对象,因为它正在执行
请求。matched\u route.name
来获取路由名称,从而获得生成路由所需的元数据路线。当请求实际与路由匹配时,路由器通常会附加此对象

我认为你有3个选择:

  • 使用返回所需内容的
    current\u route\u path
    版本完全模拟请求对象上的函数。例如
    request.current\u route\u path=lambda*a,**kw:'/path'
    。如果这不是你测试的重点,那就太好了

  • 从内省器中拉出
    IRoute
    对象,并将其附加到虚拟请求。这需要学习内省api并从中提取它,然后将其设置为
    request.matched_route=iroute_object

  • 使用经过路由器的功能测试,在这一点上,金字塔将为您正确设置


  • 通过
    DummyRequest
    模拟
    当前路由路径并不十分容易,因为它依赖于一个名为
    matched\u route
    IRoute对象来获取路由名称以及生成路由所需的元数据。当请求实际与路由匹配时,路由器通常会附加此对象

    我认为你有3个选择:

  • 使用返回所需内容的
    current\u route\u path
    版本完全模拟请求对象上的函数。例如
    request.current\u route\u path=lambda*a,**kw:'/path'
    。如果这不是你测试的重点,那就太好了

  • 从内省器中拉出
    IRoute
    对象,并将其附加到虚拟请求。这需要学习内省api并从中提取它,然后将其设置为
    request.matched_route=iroute_object

  • 使用经过路由器的功能测试,在这一点上,金字塔将为您正确设置


  • 你指的是哪些文件?请提供一个链接。还请在
    testing.testConfig
    @StevePiercy中包含您的路线配置以及如何加载该配置。我正在关注哪些文档?请提供一个链接。还请在下面的
    testing.testConfig
    @StevePiercy中包含您的路由配置以及如何加载该配置
    def includeme(config):
        ...
        config.add_route('signup', '/signup')
        ...