I have a class that expects some input via 'gets'. I found that, when
testing, I can do something as simple as this:
@foo.stub!(:gets) { "stuff\n" }
However that only works in the most simple case. In my case the class
asks a series of questions that require a yes/no answer culminating in
some end state. The class then asks if the user would like to go
through the questions again and waits for a response of yes/no. If I
want to test a single run through the questions (answering 'yes' to all
of them) and I stub 'gets' to always reply with 'yes' then I have no way
of breaking out of the loop. The test I'm running dies and complains of
the stack being too deep.
So, my question is this:
How do folks typically go about testing classes that take input from
stdin? I can post more code if necessary but this is a pretty simple
question to which, I'm sure, there is a reasonable solution.
Thanks!
Justin
on 2011-09-09 01:15
on 2011-09-09 03:08
On Thu, Sep 8, 2011 at 3:03 PM, Justin Beck <justinbeck@mac.com> wrote: > 'gets' to always reply with 'yes' then I have no way of breaking out of the > Justin > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users Two ways to approach this. On the unit level, you can stub "gets" and return a different value each time: stubs(:gets).and_return('yes', 'no', 'yes', 'yes', 'no') Each time "gets" is called it will return the next value. On a more high level, I would recommend using the aruba gem with RSpec. Here is how I've done it in my own code: https://github.com/justinko/reverse-polish-calcula... Let us know if any of that works.
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.