在一个项目中,我正在使用提供的 gem 访问 instagram。你们如何编写不需要调用服务/模拟它并保持有意义的测试?(我正在使用 rspec,但这不应该是问题)
场景:我订阅了一些标签,在收到来自 instagram 的关于新实体的帖子后,我查询标签,获取提供的媒体 ID,查询 ID 并导入结果。(有点复杂,但这似乎是它的完成方式)
我也会感谢一些实际的代码示例……</p>
在一个项目中,我正在使用提供的 gem 访问 instagram。你们如何编写不需要调用服务/模拟它并保持有意义的测试?(我正在使用 rspec,但这不应该是问题)
场景:我订阅了一些标签,在收到来自 instagram 的关于新实体的帖子后,我查询标签,获取提供的媒体 ID,查询 ID 并导入结果。(有点复杂,但这似乎是它的完成方式)
我也会感谢一些实际的代码示例……</p>
以下是我在最近参与的一个项目中如何消除对 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 之类的内容。