2

我有以下课程:

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

我遇到的问题是#short_url_lengthonTwitter::Configuration没有被存根。我做错了吗?我想要实现的只是能够在TwitterService#get_short_url_length不运行 Twitter 库的情况下运行我的方法,这会导致对 Twitter API 的请求导致失败。

我正在使用以下工具:

  • 导轨 3.2.12
  • Rspec 2.13.0
  • 推特 4.6.2

任何帮助是极大的赞赏!

4

1 回答 1

0

在您的实现中,您是否确认 @twitter.configuration 实际上是 Twitter::Configuration 的一个实例?

无论如何,我认为更好的方法是将配置注入您的代码,即

def initialize(config = Twitter::Configuration)
  @twitter ||= config
end

这可以是测试替身(模拟或存根),或者如果未指定,则使用真实服务。

于 2013-04-09T21:29:29.167 回答