Pyramid视图测试中request.current_route_path()报错解决方法
解决Pyramid测试中
request.current_route_path()报"Current request matches no route"的问题 这个问题的核心是你测试里的请求没有关联到已经加载了路由的配置上下文里。你的BaseTest已经在setUp中配置并加载了路由,但测试方法里单独用testing.testConfig()创建了一个全新的、未加载路由的配置环境,导致DummyRequest找不到对应的路由规则。
你可以通过以下几种方式修改测试代码:
方法1:将请求关联到BaseTest的配置registry
直接把BaseTest中已经配置好的registry绑定到DummyRequest上:
def test_signup_view(self): request = testing.DummyRequest(self.session) request.path = "/signup" # 关键:让请求使用已加载路由的registry request.registry = self.config.registry signup(request)
方法2:用BaseTest的config创建DummyRequest
Pyramid的测试配置对象本身提供了创建请求的方法,这样创建的请求会自动关联到当前配置的registry:
def test_signup_view(self): request = self.config.DummyRequest(self.session) request.path = "/signup" signup(request)
方法3:使用BaseTest的config上下文
通过self.config.testing_context()来包裹测试逻辑,这样上下文内的请求会自动使用已配置的路由:
def test_signup_view(self): with self.config.testing_context(): request = testing.DummyRequest(self.session) request.path = "/signup" signup(request)
为什么之前的方法不生效?
你之前用with testing.testConfig()创建的是一个独立的配置上下文,这个上下文没有执行config.include('..routes'),所以根本不知道你定义的/signup路由规则。而BaseTest的self.config已经完成了路由加载,只要让测试用的请求关联到这个配置,request.current_route_path()就能正常匹配到路由了。
内容的提问来源于stack exchange,提问作者viraptor
相关产品推荐
相关产品推荐

