我正在使用rails helper替换一段内容中的单词以添加工具提示。没问题,工作正常,但我想测试这个帮助器的确切输出,因为替换添加了一些不需要的格式,我发现很难真正测试这个帮助。
原始字符串
a piece of <a href="http://">content</a> that contains jargon1 to be replaced
我的助手用一些html替换jargon1来渲染工具提示
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
首先,that contains
和<a
之间有7个空格,我希望html在结果中显示内联,但在我的代码中我喜欢它的格式如上,以保持其可读性。< / p>
我的最终目标是建立一个强大的测试,将解析后的字符串与预定义的字符串进行比较。现在我只测试一段字符串(expect(result).to include("data-original-title='desc for jargon 1'")
)因为\ n的格式问题而且它将是一个脆弱的测试。
提前致谢!
答案 0 :(得分: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>
,这可能更容易测试。
答案 1 :(得分: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>