Как вы издеваетесь над методом с блоком, используя RR (двойной рубин) на Rails 3 - PullRequest
3 голосов
/ 09 ноября 2011

Я использую камень Коала, чтобы делать запросы на Facebook, и у меня есть следующий код:

  @graph = Koala::Facebook::API.new(oauth_token)
  @graph.batch do |batch_api|
    #... do stuff here
  end

Я хочу смоделировать пакетный вызов, чтобы имитировать то, что мы там делаем.

Вот что у меня есть в РР.

oauth_token= "Sometoken"
batch_api_mock = nil
graph_mock = mock(Koala::Facebook::API).new(oauth_token).mock!
graph_mock.batch.returns do
  yield batch_api_mock if block_given?
end

Проблема в том, что block_given? возвращает false, хотя в моем источнике передается блок.

Как мне издеваться над методом, который принимает блок с использованием RR?

1 Ответ

5 голосов
/ 10 ноября 2011

K, так что после просмотра открытых заявок я обнаружил, что ответом было то, что первым аргументом блока является RR :: ProcFromBlock, который является именно тем блоком, который будет передан функции. Вот модификация кода, чтобы заставить его работать.

oauth_token= "Sometoken"
batch_api_mock = nil
graph_mock = mock(Koala::Facebook::API).new(oauth_token).mock!

#The block is passed in as a proc as the first argument to the returns block.
graph_mock.batch.returns do |proc_as_block|
  proc_as_block.call
end

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

...