首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成文本的书写测试

生成文本的书写测试
EN

Stack Overflow用户
提问于 2016-11-11 18:40:30
回答 2查看 45关注 0票数 3

我用rails助手替换了一段内容中的单词,以添加工具提示。完全没有问题,而且工作得很好,但我想在准确的输出上测试这个帮助器,因为替换添加了一些不需要的格式,我发现很难真正测试这个帮助器。

原始字符串

代码语言:javascript
复制
a piece of <a href="http://">content</a> that contains jargon1 to be replaced

我的助手用一些超文本标记语言替换jargon1来呈现工具提示。

代码语言:javascript
复制
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的字符串的结果

代码语言:javascript
复制
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的格式化问题,这将是一个脆弱的测试。

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2016-11-11 18:54:28

您可以使用:

代码语言:javascript
复制
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>,这可能更容易测试。

票数 0
EN

Stack Overflow用户

发布于 2016-11-11 19:24:16

您应该使用Rails的视图帮助器以编程方式生成HTML。在您的特定情况下,它是link_to助手:

代码语言:javascript
复制
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

示例:

代码语言:javascript
复制
jargon = OpenStruct.new(id: 130, desc: 'desc for jargon 1', word: 'jargon1')
puts get_node(jargon)

输出:

代码语言:javascript
复制
<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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40546230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档