如何使用 instagram api/gem 模拟实际服务为方法编写测试?

Posted

技术标签:

【中文标题】如何使用 instagram api/gem 模拟实际服务为方法编写测试?【英文标题】:How can I write tests for methods using the instagram api/gem mocking the actual service? 【发布时间】:2013-04-30 15:46:24 【问题描述】:

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

场景:我订阅了一些标签,在收到来自 instagram 的关于新实体的帖子后,我查询标签,获取提供的媒体 ID,查询 ID 并导入结果。 (有点复杂,不过好像是这样做的)

如果有一些实际的代码示例,我也将不胜感激……

【问题讨论】:

【参考方案1】:

这是我在最近参与的一个项目中消除对 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

它位于 spec/support 目录中的一个文件中,需要从 spec_helper.rb 中包含,例如 config.include(EtsyStubs)

您可以将它包含在 spec_hlper.rb 中的所有规范中:

config.before(:each) do
    stub_etsy_find_listing
end

或者可以在单独测试之前包含它。

关键是选择一个响应适当调用的对象来返回。就我而言,一个简单的 OpenStruct 可以响应诸如 etsy_item.price、etsy_item.state 之类的内容。

【讨论】:

以上是关于如何使用 instagram api/gem 模拟实际服务为方法编写测试?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Instagram 故事等控件实现图像之间的导航?

google adwords api 与 google-adwords-api gem

Mailchimp API Gem - 保存其他合并字段

Swift / Instagram API - 如何使用 Instagram 应用进行身份验证

如何使用 instagram API 从个人资料用户 URL 加载 instagram 个人资料图片?

如何使用 selenium (Python) 定位 Instagram 关注按钮