url 디스패치를 사용하는 기존 피라미드 애플리케이션이 있습니다. 그것은 '/kind1/{id1}/kind2/{id2}.../action'형식의 URL을 가지고 있습니다. 따라서 순회는 이상적 이었지만 사용되지 않았습니다.urldispatch로 뷰 테스트 내부에서 컨텍스트 팩토리를 자동으로 지정하는 방법
각보기에는 url에서 인스턴스를 가져 오는 함수 호출이 있습니다. 예 : thingy_instance = get_thingy_from_url(request)
과 같은 통화가있을 수 있습니다.보기에 권한을 추가해야했습니다. 그래서 컨텍스트 팩토리를 라우트 구성에 추가했습니다. 같은 뭔가 : ThingyContext이 일을 인출하는 뷰 자체에서 나는 thingy_instance = get_thingy_from_url(request)
이 대신, thingy_instance = request.context.thingy_instance
같은 물건을 할 수 있도록 config.add_route('thingy_action','/kind1/{id1}/kind2/{id2}.../action', factory='ThingyContext')
는 이제 지금까지 꽤 똑바로 앞으로 행할, 감각을 만들 것입니다. 그러나 요청 컨텍스트가 채워되지 않기 때문에 직접 의견을 테스트하는 모든 단위 테스트를 나누기
예를 들어, 그래서 같은 시험 :.
:def test_thingy_action_scenario(self):
stuff...
x = thingy_action(request)
나에게 같은 예외를 줄 것이다
Traceback (most recent call last):
File "/home/sheena/Workspace/Waxed/waxed_backend/waxed_backend/concerns/accountable_basics/tests/view_tests.py", line 72, in test_alles
self.assertRaises(UserNotFound,lambda:get_user(request))
File "/usr/lib/python2.7/unittest/case.py", line 473, in assertRaises
callableObj(*args, **kwargs)
File "/home/sheena/Workspace/Waxed/waxed_backend/waxed_backend/concerns/accountable_basics/tests/view_tests.py", line 72, in <lambda>
self.assertRaises(UserNotFound,lambda:get_user(request))
File "/home/sheena/Workspace/Waxed/waxed_backend/waxed_backend/concerns/accountable_basics/views.py", line 69, in get_user
oUser = request.context.oUser
AttributeError: 'NoneType' object has no attribute 'thingy_instance'
요컨대. 테스트에서 request.context
은 없음입니다. 그러나 URL을 통해보기에 액세스 할 때 모두 정상적으로 작동합니다.
예 : 이런 종류가
따라서이 처리의 우아한 방법은 무엇 curl -X POST --header 'Accept: application/json' 'http://stuff/kind1/{id1}/kind2/{id2}.../action/'
새로운 세트와 함께 작동? 보기 내부에서 컨텍스트를 사용하고 테스트를 통과하려고합니다.
처음부터 테스트를 작성했다면이 방법으로 할 것입니다. 하지만 이미 많은 수의 테스트를 거친 프로젝트를 진행하고 있습니다. 최대한 재 작성을 최소화하고 싶습니다. – Sheena
유일하게 다른 옵션은 테스트에서'request.context = ...'입니다. 허용되는 것으로 표시하기 위해 여기에 필요한 다른 것을 선택해야합니다. –
많은 테스트에 많은 코드를 복사하여 붙여 넣어야 할 것입니다. 너무 좋지 않습니다. – Sheena