与Nokogiri一起编写单元测试(RSpec)

时间:2012-12-07 06:23:48

标签: ruby rspec ruby-on-rails-3.1 nokogiri rspec2

在我目前的应用程序中,我有一个从外部网站读取(提取)HTML的模块。举个例子说我正在提取以下div

<div class='sample'>
  <p class="name">Jhon Smith</p>
  <div class="address">
    No30, 5th Street,
    Home Town 
  </div>
</div>

我有阅读方法

  • 1 - 姓名
  • 2 - 地址

例如:def name(htmlDiv) -> return "Jhon Smith"

def address(htmlDiv) -> return " No30, 5th Street,Home Town "  

我的问题是如何使用rspec对这些方法进行单元测试?我的想法是做如下

  • 在spec / factories目录中有一个上面的html字符串
  • 在spec / lib / * _ spec.rb
  • 中有一个带有上述方法的spec文件
  • 读取字符串并传递给div作为参数

    1. 这种方法是正确的吗?
    2. 有没有其他简单/有条理的方法在那里进行测试 在html页面阅读涉及?

我在

  • Rails3中
  • Rapec 2.0
  • 引入nokogiri
  • RESTClient实现

1 个答案:

答案 0 :(得分:0)

当我进行单元测试时,我会“存根”这个HTML:

describe MyExtractor do
 let(:raw_html) { "<div>...</div>" }
 let(:name) { 'John' }
 let(:address) { 'Something' }

 subject { described_class.new(raw_html) }

 its(:name) { should eq name }
 its(:address) { should eq address }
end

您可以从中提取特定的context(当HTML格式不正确,何时为空,何时没有地址等)以测试边缘情况(稍后您可以为此提取共享示例)

稍后您可以进行集成测试,当您提供此HTML以从“真实”源解析时(可能会再次使用webmock或其他内容)。