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