RSpec Google Contacts Connection - PullRequest
       3

RSpec Google Contacts Connection

0 голосов
/ 17 ноября 2010

Я пытаюсь протестировать действие контроллера на Rails 2.3.10, который подключается к Google для получения контактов.Я использую Rspec и Mocha для тестирования.Я хочу оцепить реальный звонок в Google, так как это юнит-тест.Я хочу убедиться, что метод authsub_url вызывается с правильными параметрами.Отключение метода вызывает ожидание сбоя.

Любой совет будет оценен.

Спасибо!

Мой метод, который настраивает клиента на Google, приведен ниже:

  def setup_client
    @client = GData::Client::DocList.new(:authsub_scope => CONTACTS_SCOPE, :source => 'google-DocListManager-v1.1', :version => '3.0')    

    if params[:token].nil? && session[:google_token].nil?
      @authsub_link = @client.authsub_url(import_method_gmail_url, false, true)
      render :action => :index, :layout => "empty"
    elsif params[:token] && session[:google_token].nil?
      @client.authsub_token = params[:token]
      session[:google_token] = @client.auth_handler.upgrade
    end

    @client.authsub_token = session[:google_token] if session[:google_token]
  end

Вот мой тест:

  describe "setup_client" do
    it "has a authsub_link if there is no token parameter and the google token is not present in the session" do
      GData::Client::DocList.any_instance.stubs(:authsub_url).returns("http://test.google.com/contacts")
      user = Factory(:subscriber_user)
      profile = Factory(:profile, :user => user)
      login_as user

      controller.instance_variable_get(:@client).expects(:authsub_url).with(import_method_gmail_url, false, true).once

      get :index

      assigns(:authsub_link).should == "http://test.google.com/contacts"
    end
  end

Ответы [ 2 ]

0 голосов
/ 04 декабря 2010

Похоже, что вы заглушаете метод DocList#authsub_url в двух местах: -

Первая заглушка в любом экземпляре DocList и возвращает URL: -

GData::Client::DocList.any_instance.stubs(:authsub_url).returns("http://test.google.com/contacts")

Вторая заглушка находится на фактическом экземпляре DocList, но возвращает nil, потому что нет предложения returns: -

controller.instance_variable_get(:@client).expects(:authsub_url).with(import_method_gmail_url, false, true).once

Я думаю, что вы можете достичь того, чего хотите, комбинируячто-то вроде этого: -

controller.instance_variable_get(:@client).expects(:authsub_url).with(import_method_gmail_url, false, true).returns("http://test.google.com/contacts")

Обратите внимание, что once является значением по умолчанию, поэтому оно не требуется, если вы не хотите подчеркнуть, что метод должен вызываться только один раз.

0 голосов
/ 17 ноября 2010

Я бы порекомендовал FakeWeb .Это позволяет вам подделывать веб-запросы.Просто определите URL-адрес, по которому вы будете звонить, и подготовьте ответ.Облегчает вашу жизнь.

...