RSpec Stubbing: возврат в последовательности - PullRequest
4 голосов
/ 13 октября 2011

Я знаю, что работают следующие вещи:

возвращает параметр

subject.should_receive(:get_user_choice){ |choices| choices.to_a[0] }

и последовательность (она вернет 0 при первом вызове, а второй раз «выйдет»)

subject.should_receive(:get_user_choice).and_return(0, "exit")

Но как их объединить? Что делать, если я хотел бы вернуть параметр в первый раз, а затем вернуть «выход»

Ответы [ 2 ]

5 голосов
/ 13 октября 2011

В качестве альтернативы:

subject.should_receive(:get_user_choice).ordered.and_return { |choices| choices.to_a[0] }
subject.should_receive(:get_user_choice).ordered.and_return { "exit" }
1 голос
/ 13 октября 2011

Не самый элегантный, но как насчет:

n = 0
subject.should_receive(:get_user_choice){|choices|
   (n += 1) < 2 ? choices.to_a[0] : "exit"
}
...