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 に答える