0

我有阅读第三方公共网站的要求。目前我可以通过 Nokogiri 做到这一点,但我在使用 rspec 编写一些单元测试时遇到了麻烦。

我有这个 HTML <div>

<div class="user">
  <div class="name">User Name</div>
</div>

在我的阅读器模型中,我有方法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 页面源传递给该方法。

  • 我正在使用 Rails 3.2.9
  • 规格2
  • 野小切
4

1 回答 1

0

您需要将 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

于 2013-01-17T20:22:21.210 回答