我用rails助手替换了一段内容中的单词,以添加工具提示。完全没有问题,而且工作得很好,但我想在准确的输出上测试这个帮助器,因为替换添加了一些不需要的格式,我发现很难真正测试这个帮助器。
原始字符串
a piece of <a href="http://">content</a> that contains jargon1 to be replaced我的助手用一些超文本标记语言替换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在结果中内联显示,但在我的代码中,我希望它像上面那样格式化,以保持可读性。
我的最终目标是构建一个健壮的测试,将解析后的字符串与预定义的字符串进行比较。现在我只对字符串的一部分(expect(result).to include("data-original-title='desc for jargon 1'"))进行测试,因为\n的格式化问题,这将是一个脆弱的测试。
提前感谢!
发布于 2016-11-11 18:54:28
您可以使用:
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这将删除字符串开头或结尾的所有空格,并将所有多个空格(例如newline+indent)仅替换为一个空格。
然后,您的字符串看起来像<a href='...' class=X data=Y></a>,这可能更容易测试。
发布于 2016-11-11 19:24:16
您应该使用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>https://stackoverflow.com/questions/40546230
复制相似问题