2017-11-27 4 views
0

필자는 경로를 뷰에 매핑하기 위해 URL 디스패치를 ​​사용하는 Pyramid 웹 응용 프로그램을 작성했습니다.피라미드 앱의 경로 일치를 어떻게 테스트해야합니까?

내가 경로의 다양한 피라미드의 "경로 정규"를 제공 유닛 테스트들을 쓰기, 그리고 그 주장 것이다 :

올바른보기가 호출
  1. request.matchdict이 포함되어 있습니다 예상 내용

하는 방법 (실제 HTTP 요청을 제출하여, 기능 수준에서 반대) 나는이 적절한 단위 테스트 수준에서 할 수 있습니까? Pyramid의 "단위"는 실제로 경로 일치를 수행하며 내 앱의 구성된 라우팅을 테스트하기 위해 어떻게 액세스 할 수 있습니까?

참고 : 내가 기능 테스트를 사용하여이 작업을 수행 할 수 있습니다 알고 있지만 내가 훨씬 더 좁게을 테스트하는 방법을 알고 싶어하기 때문에 나는이 질문을하고 - 그냥 경로 일치하는 부분. 여러 구성 요소를 만지기 때문에 내가 찾고있는 것이 통합 테스트가 아닌 단위 테스트가 아닌 것으로 간주 될 수 있습니다.

나는 갬블하고 Dispatching URLs To Views With RoutingUnit, Integration, and Functional Testing을 비롯한 관련 피라미드 문서를 읽었습니다. 필자가 본 것은 아무것도 아니며 기능 테스트를 수행하지 않고 응용 프로그램의 구성된 라우트를 테스트하는 방법을 보여줍니다.

+1

피라미드 사이트에서 [단위, 통합 및 기능 테스트] (https://docs.pylonsproject.org/projects/pyramid/ko/latest/narr/testing.html)를 보았습니까? – wwii

+0

예, 페이지에서 설명하는 기능 테스트를 사용하여 관심있는 어설 션을 수행 할 수 있습니다. 내가 궁금해하는 것은 구체적으로 경로 매핑 기능에 대한 적절한 좁은 _unit_ 테스트를 수행하는 방법입니다. – Stew

+0

필자는 Pyramid가 작동하는 방식에 대해 더 많이 알기 때문에 기자가 흥미 롭기 때문에 기능 테스트는 일반적으로 단위 테스트보다 느리고 부서지기 쉽고 유지 관리가 어렵 기 때문에 흥미가 있습니다. – Stew

답변

1

피라미드에서이를 수행 할 공용 API가 없습니다. 그러나, 그것을위한 개인적이고 및 아주 안정되어있는 API가있다. 당신은 경고되었다.

경로 일치는 패턴뿐만 아니라 술어에서도 발생하지 않으므로 url이 아닌 일치하는 요청 개체가 필요합니다.

registry = config.registry or request.registry 
mapper = registry.getUtility(pyramid.interfaces.IRoutesMapper) 
result = mapper(request) 
route, matchdict = result['route'], result['match'] 
if route is not None: 
    route # pyramid.interfaces.IRoute object 
    matchdict # request.matchdict 

원시 IRoute는 인트로 스페 통해 공개 API에 사용할 수 있습니다 개체 자체. 이것들을 경로 단위로 볼 수 있지만 피라미드 고유의 경로 순서는 무시합니다.

introspector = config.registry or request.registry.introspector 
intr = introspector.get('routes', route_name) 
route = intr['route'] 
match = route.match(path) 
if match is not None: 
    route # pyramid.interfaces.IRoute object 
    match # request.matchdict 

이 노선은 또한 당신이 조건부 통과 여부를 결정하기 위해에 request를 전달할 수 있습니다 그것에 술어가 있습니다.

관련 문제