Hi David,

On Oct 25, 2010, at 11:23 AM, David Chelimsky wrote:

> On Oct 25, 2010, at 3:20 AM, Haim Ashkenazi wrote:
> 
>> Hi Zach,
>> 
>> On Oct 24, 2010, at 11:04 PM, Zach Dennis wrote:
>> 
>>> 
>>> 
>>> On Sun, Oct 24, 2010 at 11:21 AM, Haim Ashkenazi <haim.ashken...@gmail.com> 
>>> wrote:
>>> Hi
>>> 
>>> I wonder why this stub doesn't work:
>>> 
>>> # ruby 1.8.7, rspec 2.0.1
>>> require 'rubygems'
>>> require 'rspec'
>>> 
>>> Rspec.configure do |c|
>>> 
>>>   c.mock_with :rspec
>>> end
>>> 
>>> class SayHello
>>>   def say_hello
>>>     "hello"
>>>   end
>>> end
>>> 
>>> describe "test string" do
>>>   it "should interpret stub correctly" do
>>>     SayHello.stub!(:say_hello).and_return('NO')
>>> 
>>>     sh = SayHello.new()
>>>     sh.say_hello.should eql('NO')
>>>   end
>>> end
>>> In your example you are stubbing a class method. In your implementation you 
>>> have defined an instance method. To have this work for your given 
>>> implementation you need to know about the instance you are working with, ie:
>>> 
>>> it "should interpret stub correctly" do
>>>     sh = SayHello.new()
>>>     sh.stub!(:say_hello).and_return 'NO'
>>>     sh.say_hello.should eql('NO')
>>>  end
>>> 
>>> Hope this helps,
>> 
>> Thanks for your help. I've found in the archives that you have to use mocha 
>> to do these kind of things.
> 
> This is incorrect. You are free to use mocha, but rspec-mocks, RR, and 
> flexmock are all perfectly capable of stubbing class methods, so you don't 
> _have_ to use mocha.
Sorry, I didn't mean it this way. I actually tried it with RR and mocha and for 
some reason it didn't work for me (see next comment).

> 
>> I tried a different approach (to mock the initializer) but although this 
>> works on a simple setup, it didn't work for me on my real classes.
> 
> What Zach suggested is the correct approach. What problem are you seeing when 
> you try it?
The problem I'm trying to solve is a little more complicated then the example. 
I've sent a new email with a better description of the problem here:
http://rubyforge.org/pipermail/rspec-users/2010-October/018571.html

Somehow the links are not displayed (I've sent a follow-up message but it's not 
in the archive yet), 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).

The problem is that I have a SshBackend class which initializes with arguments. 
It also has a shell method which invokes exec. The SshBackend is invoked from 
the CLI class. I was trying to make sure that :new was called with the correct 
arguments and that :shellI is executed. One way would be to mock the :shell 
method (this email was about that) so that :exec would not be called and the 
other was to mock the :new method and return a mocked object (my second email).

Somehow, non of these works for me. 

Thanks in advance

Haim

Attachment: PGP.sig
Description: This is a digitally signed message part

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

Reply via email to