Я пытаюсь написать модульный тест для старого приложения pylons
0.9.7.
Проблема, которую мы имеем, заключается в том, что очень легко случайно жестко закодировать URL
пути в наших jinja2
шаблонах, которые прекрасно работают, пока кто-то не хостит
наше приложение с другим префиксом (т.е. размещает его на
http://localhost/foo/
вместо http://localhost/
). я
делая это с помощью настройки «функционального теста» по умолчанию, которая вставляет
создан для меня. Я запрашиваю каждое действие контроллера и передаю
SCRIPT_NAME
вроде так:
response = self.app.get('/some/url/path',
extra_environ={'SCRIPT_NAME' : '/custom_prefix'})
Затем я использую beautifulsoup
для анализа документа, перебирая все
теги, которые имеют атрибут href
или src
, и обеспечивают
что он начинается с '/custom_prefix'.
Вот где все становится странным: когда мы проходим абсолютный путь к
pylons.url
(что на самом деле routes.util.URLGenerator
) в наших шаблонах, как это:
{{ h.stylesheet_link(h.url('/css/style.css')) }}
... работает отлично. Тем не менее, когда мы вызываем pylons.url
с ключевым словом
аргументы как это:
{{ h.link_to('Home', h.url(controller='person', action='home')) }}
... префикс не вставлен. Однако функция url()
работает
правильно при правильном запуске (т. е. используя mod_wsgi
или
pastedeploy
) с непустым SCRIPT_NAME
.
Полагаю, я пропустил важный шаг, но не могу понять, что это такое.