我有以下类(class):
class TwitterService
def initialize
@twitter ||= Twitter
end
def get_short_url_length
@twitter.configuration.short_url_length
end
end
以及以下规范:
describe TwitterService do
before(:each) do
Twitter::Configuration.any_instance.stub(:short_url_length).and_return(12)
end
it 'does not send short_url_length request to Twitter' do
twitter = TwitterService.new
twitter.get_short_url_length.should == 12
end
end
我遇到的问题是 Twitter::Configuration
上的 #short_url_length
没有被 stub 。我做错了吗?我想要实现的是能够在不运行 Twitter 库的情况下运行我的 TwitterService#get_short_url_length
方法,这会导致对 Twitter 的 API 的请求导致失败。
我正在使用以下工具:
- rails 3.2.12
- Rspec 2.13.0
- 推特 4.6.2
非常感谢任何帮助!
最佳答案
在您的实现中,您是否确认@twitter.configuration 实际上是 Twitter::Configuration 的一个实例?
无论如何,我认为更好的方法是在您的代码中注入(inject)一个配置,即
def initialize(config = Twitter::Configuration)
@twitter ||= config
end
这可以是测试替身(模拟或 stub ),或者如果未指定则使用真实服务。
关于ruby-on-rails - 如何使用 rspec stub 访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15911822/