Использование вебратовых (текстовых) сопоставлений с haml - PullRequest
2 голосов
/ 08 октября 2009

Я использую следующее средство сопоставления вебрат:

response.should contain(text)

Со следующим хамлом:

%p
  You have
  = current_user.credits
  credits

Я написал шаг огурца «Тогда я должен увидеть« У вас есть 10 кредитов »», который использует приведенное выше средство сопоставления вебрат. Шаг не выполняется, вебрат не находит текст в ответе, потому что хамл на самом деле выдает

<p>You have
10
credits</p>

Как я могу заставить совпадение соответствовать выводу, который производит haml?

Примечание. Выше приведен упрощенный пример ситуации, с которой я имею дело. Написание следующего хамла не является приемлемым решением:

%p= "You have #{current_user.credits} credits"

Ответы [ 4 ]

3 голосов
/ 13 октября 2009

Ты прав, это боль. Я нахожу, что Вебрат слишком раздражает слишком много времени.

Две идеи:

  1. Исправьте ваш тест. В этом случае вы хотите, чтобы он был закрыт для перехода на новую строку, поэтому избавьтесь от них всех: response.tr("\n","").should contain(text)
  2. Исправьте свой Haml. Это, вероятно, лучший вариант. Вы можете использовать многострочный терминатор |, чтобы запретить Haml вставлять разрывы строк:
    %p
      You have |
      = current_user.credits |
      credits

См. Справочник Haml *1019* для более неясных вещей вроде этого. (Удивительное количество, которое имеет отношение к пробелам.)

2 голосов
/ 26 октября 2010

лучше, чем

%p= "You have #{current_user.credits} credits"

будет

%p You have #{current_user.credits} credits

, поскольку Haml автоматически интерполирует текстовые узлы.

1 голос
/ 14 ноября 2009

Я обнаружил, что-то вроде:

response.should contain(/You have 10 credits/m)

будет часто давать мне матч, который я хочу, без моего бреда с моим Хамлом. Учитывая выбор между перепиской с моей разметкой, которую я действительно хочу, чтобы она была читабельной, и заменой моего сопоставителя на регулярное выражение, последнее кажется небольшой ценой за более простое кодирование представления.

0 голосов
/ 26 октября 2010

В Haml есть различные средства для управления пробелами, но правильная вещь, которую нужно сделать здесь, это либо пересмотреть сопоставление, чтобы оно не зависело от пробелов, либо использовать фильтр для записи вашего встроенного контента. Например:

%p
  :plain
    You have #{current_user.credits} credits

Или, если вам нужна более сложная логика:

%p
  :erb
    You have <%= current_user.credits %> credits

Haml предназначен для эффективного выражения структуры документа, но он не так хорош для выражения встроенного содержимого. Когда вы хотите сделать причудливые встроенные вещи (как здесь), имеет смысл углубиться в ERB / ​​HTML, а не использовать чисто Haml. Подробнее см. в этом блоге .

...