Len
Len

Reputation: 2145

RSpec Stubbing: return in a sequence

I know the following things work:

returning a parameter

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

and a sequence (it will return a 0 on the first call, and the second time "exit")

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

But how to combine them? what if I would like to return the parameter the first time and then return "exit"

Upvotes: 4

Views: 922

Answers (2)

Jakob S
Jakob S

Reputation: 20125

Alternatively:

subject.should_receive(:get_user_choice).ordered.and_return { |choices| choices.to_a[0] }
subject.should_receive(:get_user_choice).ordered.and_return { "exit" }

Upvotes: 5

Laas
Laas

Reputation: 6068

Not most elegant, but how about:

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

Upvotes: 1

Related Questions