我有阅读第三方公共网站的需求。目前我可以通过 Nokogiri 做到这一点,但我在使用 rspec 编写一些单元测试时遇到了麻烦。
我有这个 HTML
<div>
:
<div class="user">
<div class="name">User Name</div>
</div>
在我的 Reader 模型中,我有方法
name
,它从 HTML 中读取名称:
class SampleReader
def name(html_div)
html_div.css('name')
end
end
在我的 RSpec 测试用例中,我将上述 HTML
<div>
作为字符串传递给 name
方法,并收到以下错误:
undefined method `css' for #<String:0x007fd8a0b39c98>
我相信这是因为 Nokogiri 无法将该字符串识别为 HTML。我该如何编写测试用例?我的首选选项是仅将
<div>
字符串而不是整个 HTML 页面源传递给该方法。
您需要将 HTML 字符串包装为 Nokogiri 文档:
require 'nokogiri'
str = <<-HTML
<div class="user">
<div class="name">User Name</div>
</div>
HTML
class SampleReader
def name(html_div)
doc = Nokogiri::HTML(html_div)
doc.css('.name').text
end
end
reader = SampleReader.new
puts reader.name(str) #=> "User Name"
另外,不要忘记将您的应用程序升级到 Rails 3.2.11。