Как смоделировать вызов метода в RSpec - PullRequest
1 голос
/ 01 мая 2019

Мне нужно смоделировать вызов метода в RSpec. Я знаю, как это сделать для обычного вызова метода. Но этот вызов метода связан с обратной связью, которую я получаю в журнале ошибок. Как я могу высмеять это?

журнал

Failure/Error: response = Facebook.oauth_for_app(provider).exchange_access_token_info(token)

     Koala::Facebook::OAuthTokenRequestError:
       type: OAuthException, code: 190, message: Invalid OAuth access token. [HTTP 400]

facebook.rb

module Facebook
  config = Rails.application.settings

  APP_ID = config[:facebook][:id]
  SECRET = config[:facebook][:secret]

  REWARDS_APP_ID = config[:facebook_rewards][:id]
  REWARDS_SECRET = config[:facebook_rewards][:secret]

  def self.config_for_app(app)
    app_id = app ? "#{app.upcase}_APP_ID" : 'APP_ID'
    secret = app ? "#{app.upcase}_SECRET" : 'SECRET'

    [const_get(app_id), const_get(secret)]
  end

  def self.oauth_for_app(app)
    _, app = /facebook_app_(.+)/.match(app).to_a
    Koala::Facebook::OAuth.new *config_for_app(app)
  end
end

я пытался

before do
  setup_omniauth
  allow(Koala::Facebook::OAuth).to receive(:refresh_facebook_token).and_return(true)
end

Ответы [ 2 ]

3 голосов
/ 01 мая 2019

Это хороший вариант использования, например, удваивает ИМО,

oauth = instance_double(Koala::Facebook::OAuth)
allow(Koala::Facebook::OAuth).to receive(:new).with(config).and_return(oauth)
allow(oauth).to receive(:some_other_method)
1 голос
/ 01 мая 2019

Мне удалось найти другое решение, используя receive_message_chain

  allow(Facebook).to receive_message_chain(:oauth_for_app, :exchange_access_token_info).and_return('access_token' => '123', 'expires' => 500_000)
...