[rspec-users] Need help to figure out why this expectation isn't met.

Chris Mear chrismear at gmail.com
Tue Oct 26 05:15:38 EDT 2010

On 25 Oct 2010, at 09:54, Haim Ashkenazi wrote:

> On Oct 25, 2010, at 9:09 AM, Haim Ashkenazi wrote:
>> Hi
>> This is my first ruby script, so sorry if it's trivial :)
>> I have a should_receive expectation on :new which should work (and works on a simple test I wrote) but it doesn't work in my case and I can't figure out why. The source is on github (commit: 5197b763f391d6d358ca7bc5838375c9247271d8). The spec that doesn't work is in spec/runsshlib/cli_spec.rb line 127 (currently commented out).
>> Can someone pls help me figure out why the expectation doesn't work?
>> Thanks in advance
>> Haim
> Hi
> I'm not sure if the URLs in the original post can be viewed :( so here they are:
> 	• The repository is here: http://github.com/babysnakes/runssh
> 	• The spec with the problem is http://github.com/babysnakes/runssh/blob/5197b763f391d6d358ca7bc5838375c9247271d8/spec/runsshlib/cli_spec.rb (line 127).
> Thanks
> Haim

(Moved your reply inline.)

The rescuing that you do in line 56 of CLI#run was obscuring the real error here:

  1) The CLI interface when run with subcommand shell should correctly initialize SshBackend
     Failure/Error: cli.run
     host definition (cust2 => dc => somehost) doesn't exist!
     # ./lib/runsshlib/config_file.rb:101:in `get_host'
     # ./lib/runsshlib/cli.rb:228:in `run_shell'
     # ./lib/runsshlib/cli.rb:54:in `call'
     # ./lib/runsshlib/cli.rb:54:in `run'
     # ./spec/runsshlib/cli_spec.rb:133

I found this by commenting out the lines where you rescue the exception and raise a Trollop error instead.

So the example wasn't even reaching the line in CLI#run_shell where you create the SshBackend, because it was failing on the get_host call (since the example uses dummy data).

I got the example to pass by also mocking/stubbing the ConfigFile stored in @c, and stubbing its get_host method:


If you want to mock everything outside of the CLI object in this spec, that's one (not hugely elegant) way to do it.

When you have problems like this, it's helpful to dig down and find the exact place the error is occurring.


More information about the rspec-users mailing list