2016-11-11 6 views
3

Я заменяю слова в куске контента с помощью помощника рельсов для добавления всплывающих подсказок. Никаких проблем и не работает нормально, но я бы хотел проверить этот помощник на точном выходе и потому что замена добавляет некоторые нежелательные форматирования, мне трудно проверить этот помощник.Письменный тест на сгенерированный текст

исходная строка

a piece of <a href="http://">content</a> that contains jargon1 to be replaced 

мой помощник заменяет jargon1 с некоторым HTML для отображения всплывающей подсказки

content.gsub!(/#{jargon.word}/i, get_node(jargon)) 

def get_node jargon 
    <<-HTML 
    <a href='#jargon-#{jargon.id}' 
     class='jargon-tip' 
     data-toggle='tooltip' 
     data-placement='top' 
     data-original-title='#{jargon.desc}' 
     rel='help'>#{jargon.word}</a> 
    HTML 
end 

результата строки с нагнетаемым HTML

a piece of <a href="http://">content</a> that contains  <a href='#jargon-130' 
    class='jargon-tip' 
    data-toggle='tooltip' 
    data-placement='top' 
    data-original-title='desc for jargon 1' 
    rel='help'>jargon1</a> 
    to be replaced 

Прежде всего 7 пробелов между that contains и <a и i хотел бы, чтобы html отображал inline в результате, но в моем коде мне нравится форматировать, как показано выше, чтобы он был читабельным.

Моей конечной целью было бы построить надежный тест для сравнения анализируемой строки с предварительно определенной строкой. На данный момент я тестирую только часть строки (expect(result).to include("data-original-title='desc for jargon 1'")) из-за проблем с форматированием с \ n, и это будет хрупкий тест.

Заранее благодарен!

ответ

0

Вы могли бы использовать:

def get_node jargon 
    node=<<-HTML 
    <a href='#jargon-#{jargon.id}' 
     class='jargon-tip' 
     data-toggle='tooltip' 
     data-placement='top' 
     data-original-title='#{jargon.desc}' 
     rel='help'>#{jargon.word}</a> 
    HTML 
    node.strip.gsub(/\s+/, ' ') 
end 

Это удаляет пробелы в начале или в конце строки, и заменяет любые несколько пробелов (например, символ новой строки + отступа) с помощью всего пространства.

Ваша строка тогда выглядит как <a href='...' class=X data=Y></a>, что, вероятно, легче протестировать.

0

Вы должны использовать помощники вида Rails для генерации HTML программно. В вашем конкретном случае это link_to помощник:

def get_node(jargon) 
    link_to(jargon.word, "#jargon-#{jargon.id}", 
    class: 'jargon-tip', 
    rel: 'help', 
    data: { 
     toggle: 'tooltip', 
     placement: 'top', 
     original_title: jargon.desc 
    } 
) 
end 

Пример:

jargon = OpenStruct.new(id: 130, desc: 'desc for jargon 1', word: 'jargon1') 
puts get_node(jargon) 

Выход:

<a class="jargon-tip" data-toggle="tooltip" data-placement="top" data-original-title="desc for jargon 1" rel="help" href="#jargon-130">jargon1</a> 
+0

Это лучший способ сделать это, изменил его сразу .. но я все равно хотел бы использовать отступы в строке сравнения в тестовом помощнике. Есть ли способ игнорировать новые строки, созданные в моем значении кода/переменной на выходе? добавленный ('\ n'), когда я вставляю html. Спасибо – Daniel

+0

Да, см. Мой ответ с полосой и gsub. –