2013-04-09 5 views
2

У меня есть следующий класс:Как тупиковые аксессоры с RSpec

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_length на Twitter::Configuration не получает погасила. Я делаю это неправильно? Все, что я пытаюсь достичь, - это запустить мой метод TwitterService#get_short_url_length без запуска библиотеки Twitter, что вызывает запрос API Twitter, что приводит к сбою.

Я использую следующие инструменты:

  • Rails 3.2.12
  • Rspec 2.13.0
  • Twitter 4.6.2

Любая помощь очень ценится!

ответ

0

В вашем исполнении вы подтвердили, что @ twitter.configuration на самом деле является экземпляром Twitter :: Конфигурация?

Несмотря на это, я думаю, что лучший способ сделать это было бы придать конфигурацию в код, т.е.

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

Это может быть двойной тест (макет или заглушки), или использовать реальную услугу, если none не указано.

+0

Когда данные аутентификации установлены, @ twitter.configuration является экземпляром Twitter :: Configuration. В консоли Rails, если я запустил 'Twitter.configuration', он фактически аутентифицируется с помощью Twitter сразу. Я думаю, именно поэтому я не могу наложить на него метод. Я также не могу передать конфигурацию в качестве параметра, потому что это часть модуля Twitter. – sudoash

Смежные вопросы