2013-04-30 33 views
3

在一个项目中,我使用提供的gem访问instagram。你们如何编写不需要调用服务/测试它并保持有意义的测试? (我正在使用rspec,但这不应该是问题)如何使用instagram api/gem嘲笑实际服务来编写测试方法?

场景:我订阅了一些标签,在收到有关新实体的Instagram帖子后,我查询了标签,获取了提供的媒体ID,查询了ID并导入结果。 (有点复杂,但是这似乎是它是如何做)

我会为一些实际的代码示例感谢,太...

回答

0

这里是我掐灭到Etsy的一些类似的电话在一个项目我最近工作过。

module EtsyStubs 

    def stub_etsy_find_listing(options = {}) 
     if options[:fail] 
      Etsy::Listing.stub(:find).and_return(nil) 
      return 
     end 

     etsy_item = OpenStruct.new(
      state: options[:state], 
      price: options[:price], 
      result: { 
      "currency_code" => "USD", 
      "Variations" => [] 
      } 
     ) 

     Etsy::Listing.stub(:find).and_return(etsy_item) 
     end 

end 

这住在规格/支持目录中的文件,需要包括来自像config.include(EtsyStubs)的spec_helper.rb。

您可以包括它从spec_hlper.rb所有规格有:

config.before(:each) do 
    stub_etsy_find_listing 
end 

或可单独测试之前,包括它。

关键是选择一个对象来响应相应的调用。在我的情况下,一个简单的OpenStruct会响应诸如etsy_item.price,etsy_item.state之类的东西,效果很好。