Ruby on rails 页面内容中html实体的Rspec测试

Ruby on rails 页面内容中html实体的Rspec测试,ruby-on-rails,ruby,rspec,html-entities,Ruby On Rails,Ruby,Rspec,Html Entities,我正在编写一个请求规范,希望测试字符串“Reports»Aging Reports”是否存在。如果我直接在matcher表达式中输入字符,我会得到一个错误(无效的多字节字符),因此我尝试这样做:page.should有内容(“报告»;账龄报告”) 这会导致测试失败,并显示以下消息: 预计“\n报告”>账龄报告中会有内容“报告»;账龄报告”\n 我尝试过.html\u safe之类的方法,但没有成功。有没有办法测试包含html实体的文本 编辑: 以下是html源代码的相关区域:

我正在编写一个请求规范,希望测试字符串“Reports»Aging Reports”是否存在。如果我直接在matcher表达式中输入字符,我会得到一个错误(无效的多字节字符),因此我尝试这样做:
page.should有内容(“报告»;账龄报告”)

这会导致测试失败,并显示以下消息:

预计“\n报告”>账龄报告中会有内容“报告»;账龄报告”\n

我尝试过
.html\u safe
之类的方法,但没有成功。有没有办法测试包含html实体的文本

编辑:

以下是html源代码的相关区域:


»;
我找到了一个暂时的解决方法,它使用正则表达式而不是字符串:

find('#breadcrumbs').text.should match(/Reports . Aging Reports/)

这将获取
breadcrumbs
div的文本,其中包含我正在查找的文本,因此匹配的范围是有限的。这很好,但我仍然希望知道如何匹配特定的html实体。

您也可以让测试人员查看页面的原始源代码:

breadcrumb='»;'
page.body.应包括(面包屑)
预期(第页正文)。包括(面包屑)#rspec 2.11+
尽管如此,我不确定这是最优雅的解决方案。假设在链接周围有一个名为
.breadcrumb
的类,您只需验证div中是否存在链接:

“.breadcrumb”中的

page.应该有_css('a',文本:'Reports')
page.应该有_css('a',文本:'Aging Reports')
期望(第页)有_css('a',text:'Reports')#rspec 2.11+
期望(第页)有_css('a',文本:'Aging Reports')#rspec 2.11+
结束

这样,您就可以在面包屑块中显式地查找a href。

html\u safe
不会删除html标记(如果您需要)

如果要在测试之前删除html标记,则可以使用
sanitize
gem

# in Gemfile
gem 'sanitize'

# in testfile
require 'sanitize'
html = Sanitize.clean(page.body.text)
html.should have_content("Reports » Aging Reports")

有时候最简单的解决方案是正确的,事情就是这样

page.should have_content("Reports » Aging Reports")

这可能是因为HTML源包含一个
>
,而不是
。更改HTML以便使用
而不是
>>
。实际呈现的HTML是什么?是HTML源的
>
部分还是在HTML源中定义为
e HTML。不确定“预期”的原因“正在显示
和#187而不是
»,但HTML实际上是»;第187条;是“raquo”的另一种形式;我尝试过的实体,但我已经更新了问题。看起来RSpec正在转换
»为您输入
»
。试着在你的测试中加入真实的角色。我同意这一点。不知道为什么七年来我是这里唯一一个投票人。