使用 rspec2 和 Nokogiri 进行单元测试

问题描述 投票:0回答:1

我有阅读第三方公共网站的需求。目前我可以通过 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 页面源传递给该方法。

  • 我正在使用 Rails 3.2.9
  • Rspec2
  • 野科切
ruby ruby-on-rails-3 nokogiri rspec2
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

© www.soinside.com 2019 - 2024. All rights reserved.