Thanks Justin, that'll work just fine for my simple case and, in the mean time, 
I'll look in to aruba also.

Much appreciated!

Justin

On Sep 8, 2011, at 7:38 PM, rspec-users-requ...@rubyforge.org wrote:
> 
> ------------------------------
> 
> Message: 8
> Date: Thu, 08 Sep 2011 17:03:50 -0400
> From: Justin Beck <justinb...@mac.com>
> To: rspec-users@rubyforge.org
> Subject: [rspec-users] rspec and testing IO
> Message-ID: <50e4d18c-3f36-4707-82f1-6166afb77...@mac.com>
> Content-Type: text/plain; CHARSET=US-ASCII
> 
> 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
> 
> 
> ------------------------------
> 
> Message: 9
> Date: Thu, 8 Sep 2011 17:37:42 -0600
> From: Justin Ko <jko...@gmail.com>
> To: rspec-users <rspec-users@rubyforge.org>
> Subject: Re: [rspec-users] rspec and testing IO
> Message-ID:
>       <cajkeazjneskydbtw0c-3ym2xxq5gxmodyoas-ch+ro9vmpw...@mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
> 
> On Thu, Sep 8, 2011 at 3:03 PM, Justin Beck <justinb...@mac.com> wrote:
> 
>> 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
>> _______________________________________________
>> 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-calculator/tree/master/spec/acceptance
> 
> Let us know if any of that works.
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: 
> <http://rubyforge.org/pipermail/rspec-users/attachments/20110908/78a4b9a6/attachment.html>
> 
> ------------------------------
> 
> _______________________________________________
> rspec-users mailing list
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
> 
> End of rspec-users Digest, Vol 63, Issue 6
> ******************************************

_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to