使用rspec2和Nokogiri进行单元测试



我有一个阅读第三方公共网站的需求。目前我能够通过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
  • Nokogiri

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

相关内容

  • 没有找到相关文章

最新更新