2013-10-22 62 views
1

我正在使用Ruby的Curl gem(https://github.com/taf2/curb),並且需要在我的rspec測試之一中存根Curl.get(以返回空白響應)。我如何根據rspec存根gem中的模塊方法

這裏是我的嘗試:

o = OpenStruct.new(:body => '') 
Curl.any_instance.stub(:get).and_return(o) 

不幸的是,捲曲是一個模塊,而不是一個類(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模塊中存儲一個方法?

回答

1

從路邊文檔:

路沿石提供了兩個類:

捲曲::簡單 - 簡單的API,爲每天的日常任務。 Curl :: Multi - 更高級的API,可同時在多個URL上操作。

這意味着像

Curl::Easy.any_instance.stub(:get).and_return(o) 

應該工作。

其實你甚至可以樁模塊方法:

o = OpenStruct.new(:body => 'test') 
Curl.stub(:get).and_return(o) 

然後在你的測試:

http = Curl.get("http://www.google.com/") 
1

如果需要存根Curl.get,那麼這樣做:

o = OpenStruct.new(:body => '') 
Curl.stub(:get).and_return(o) 

在Ruby中,Modules和Classes上的方法仍然只是方法。