我正在使用Curl gem for Ruby(https://github.com/taf2/curb),我需要在我的一个rspec测试中存根Curl.get(返回空白响应)。
这是我试过的:
o = OpenStruct.new(:body => '')
Curl.any_instance.stub(:get).and_return(o)
不幸的是,Curl是一个模块,而不是一个类(https://github.com/taf2/curb/blob/master/lib/curl.rb),所以当我尝试存根时它会出错:
stock_spec.rb:20:in `block (2 levels) in <top (required)>': undefined method `any_instance' for Curl:Module (NoMethodError)
我应该如何使用rspec在模块内存根方法?
答案 0 :(得分:1)
来自curb docs:
Curb提供两个类:
Curl :: Easy - 简单的API,适用于日常任务。 Curl :: Multi - 更高级的API,用于同时操作多个URL。
这意味着类似
Curl::Easy.any_instance.stub(:get).and_return(o)
应该有用。
实际上你甚至可以使用stub模块方法:
o = OpenStruct.new(:body => 'test')
Curl.stub(:get).and_return(o)
然后在你的测试中:
http = Curl.get("http://www.google.com/")
答案 1 :(得分:1)
如果您需要存根Curl.get
,请执行以下操作:
o = OpenStruct.new(:body => '')
Curl.stub(:get).and_return(o)
在Ruby中,模块和类的方法仍然只是方法。