Предикат Capybaras has_select?
и have_select
matcher ищут элементы HTML <select>
. В зависимости от того, что вы подразумеваете под указателем даты, вам нужно будет использовать сопоставление, которое будет соответствовать правильному типу элемента, или have_selector
, если нет конкретного сопоставителя. Если то, что вы на самом деле проверяете, является элементом <input type="date">
со связанной меткой, содержащей текст «Дата начала», тогда вы можете использовать сопоставление have_field
:
expect(page).to have_field 'Start date', type: 'date'
Если вы используете Rails помощник представления date_select создает HTML, например
<div class="field">
<label for="post_start_date">Start date</label>
<select id="post_start_date_1i" name="post[start_date(1i)]">
<option value="2014">2014</option>
<option value="2015">2015</option>
...
</select>
<select id="post_start_date_2i" name="post[start_date(2i)]">
<option value="1" selected="selected">January</option>
<option value="2">February</option>
...
</select>
<select id="post_start_date_3i" name="post[start_date(3i)]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
...
</select>
</div>
Из этого HTML видно, что элемент < label> на самом деле не связан ни с одним из полей формы (атрибут for
не делает t соответствовать id), что означает, что вы не сможете сопоставить элементы < select>, используя текст метки. Вместо этого вам нужно будет использовать либо идентификатор, либо имя и сопоставлять их индивидуально
expect(page).to have_select('post_start_date_1i')
expect(page).to have_select('post[start_date(2i)]')
...
, либо вы можете использовать фильтр id
с регулярным выражением и счетчиком, чтобы проверить, что есть 3 элемента, совпадающих как [ 1115]
expect(page).to have_select(id: /^post_start_date_[123]i$/, count: 3)
Обратите внимание, что это технически не так «правильно», как делать их по отдельности, так как на самом деле вы можете иметь 3 элемента с идентификатором post_start_date_1i, и он все равно будет проходить, но в этом случае ваш HTML также будет недействительным. 1116]
Если вы проверяете не тот тип HTML-элемента, вам нужно предоставить HTML-код, чтобы получить точный ответ.
Взгляд на Мако.
Вот то, как я справляюсь с веб-разработчиками.
${...}
замены.Использование операторов "if" требует согласования, так как макет является одной версией страницы, и обычно существуют некоторые объяснения условной презентации некоторого материала.
Механизм шаблонной обработки Django довольно достоин. Это довольно устойчиво, не ступая на слишком много пальцев ног. Если бы Вы работаете с Python, я рекомендовал бы это. Я не знаю, как развестись с ним от Django, но я сомневаюсь, что это было бы очень трудное наблюдение, поскольку Django является довольно модульным.
Править: По-видимому, мини-путеводитель к использованию автономного механизма шаблонной обработки Django уже находился передо мной, insin спасибо.
У меня были хорошие голоса при ответе на дубликат этого того же вопроса.
Мой ответ был:
Хороший синтаксис, хорошие возможности настройки.
Интегрируется хорошо. Может поиграться в песочнице, таким образом, Вы не должны доверять полностью своим шаблонным авторам. (Мако не может).
Это также довольно быстро с премией компиляции Вашего шаблона к байт-коду, и кэшируйте его, как в демонстрации ниже:
>>> import jinja2
>>> print jinja2.Environment().compile('{% for row in data %}{{ row.name | upper }}{% endfor %}', raw=True)
from __future__ import division
from jinja2.runtime import LoopContext, Context, TemplateReference, Macro, Markup, TemplateRuntimeError, missing, concat, escape, markup_join, unicode_join
name = None
def root(context, environment=environment):
l_data = context.resolve('data')
t_1 = environment.filters['upper']
if 0: yield None
for l_row in l_data:
if 0: yield None
yield unicode(t_1(environment.getattr(l_row, 'name')))
blocks = {}
debug_info = '1=9'
Этот код был сгенерирован на лету Jinja2. Конечно, компилятор optmizes это далее (например, удаление if 0: yield None
)
Для добавления к комментарию @Jaime Soriano Genshi является движком шаблонов, используемым в Trac пост - 0.11. Это, может использоваться в качестве универсального решения для шаблонной обработки, но имеет внимание на HTML/XHTML. Это имеет автоматический выход для сокращения уязвимостей XSS.
Я лично нашел, что шаблоны Гепарда были очень благоприятны для разработчика. То, чему требовалось некоторое время, было идеей шаблонного разделения на подклассы, и это было чем-то трудно для получения вначале. Но разработчик создает полный шаблон, копируя его код... Затем можно пойти, очищают вещи немного.
Голосование ми переходит к Clearsilver, это - движок шаблонов, используемый в Trac прежде 0.11, он также используется на страницах как Google Groups или Orkut. Основные преимущества этого движка шаблонов - то, что это очень быстро и независимо от языка.
Я играл обе роли, и в глубине души я предпочитаю больше языка шаблонной обработки программиста. Однако я, внештатный работник для нескольких графических дизайнеров, делающих "тяжелый подъем", поддержанный и программирование дб и, может сказать Вам, что у меня была лучшая удача с XML шаблонная обработка языков (SimpleTAL, Genshi, и т.д.).
Когда я пытаюсь быть веб-дизайнером, дружелюбным, я ищу что-то, что может быть загружено в DreamWeaver и видеть результаты. Это позволяет мне обеспечивать все рычаги в шаблоне и позволять разработчику настроить его, не волнуя по поводу повреждения, что я уже записал. Это позволяет нам совместно использовать код и работать лучше вместе, где мы оба довольны форматом.
Если разработчик кодирует без WYSIWYG-редактора, я думаю, что Вы - опции, менее ограничены, и Вы могли пойти со своим собственным любимым.