3

我正在为 Ruby ( https://github.com/taf2/curb ) 使用 Curl gem,我需要在我的一个 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 对模块内的方法进行存根?

4

2 回答 2

2

如果您需要 stub Curl.get,请执行以下操作:

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

在 Ruby 中,模块和类上的方法仍然只是方法。

于 2013-10-24T02:10:15.543 回答
1

从遏制文档:

Curb 提供了两个类:

Curl::Easy - 简单的 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/")
于 2013-10-23T00:06:48.843 回答