0

次のコードがあります

Class Client 
  def initialize(options = {})
    @key = options['oauth_key']
    @secret = options['oauth_secret']
    @access_token_url = options['oauth_access_token_url']
    @signature_method = options['signature_method']
    @consumer = OAuth::Consumer.new(@key, @secret, {access_token_url: @access_token_url, signature_method: @signature_method})
  end

  def accounts_by_id(account_id)
    response = query_account(account_id)
    parse_json(response)
  end

  private
  def access_token()
    ...
    ...
    ... 
    @access_token = @consumer.get_access_token(nil)
    ...
  end

消費者は次のように嘲笑されました

oauth_mock = mock('oauth')
OAuth::Consumer.stubs(:new).returns(oauth_mock)

ただし、Mock「oauth」が予期しないメッセージを受信:get_access_token with (nil)すると、

GameSystem::Client.new(oauth_key: 'KEY',oauth_secret: 'SECRET',oauth_access_token_url: 'http://localhost').accounts_by_id("kk")

access_token メソッドは query_account 内で呼び出されます。問題を克服するためにそれをモックする方法を知っている人はいますか。

4

1 に答える 1

2

モックを返すためにスタブOAuth::Consumer.new化していますが、モックには何もスタブ化していないため、#get_access_tokenメソッド (または他のメソッド) がありません。モックで使用するメソッドをスタブする必要があります。

oauth_mock = mock
oauth_mock.stubs(:get_access_token).returns(whatever)
Oauth::Consumer.stubs(:new).returns(oauth_mock)
于 2013-03-27T22:58:31.283 に答える