[mocha-developer] Mocking system/`

Jonathan Younger daikini at gmail.com
Tue Jun 12 15:19:55 EDT 2007


On Jun 12, 2007, at 12:58 PM, Kevin Clark wrote:

> I could have sworn I tried that. Is it working for you?
>

Yup, it's working fine for me.


# foo_test.rb
require 'rubygems'
require 'test/unit'
require 'mocha'

class Foo
   def files
     `ls`
   end
end

class FooTest < Test::Unit::TestCase
   def test_should_return_files
     foo = Foo.new
     foo.expects(:"`").with("ls").returns("list of files")

     assert_equal "list of files", foo.files
   end
end


megiddo:~/Projects jonathan$ ruby foo_test.rb
Loaded suite foo_test
Started
.
Finished in 0.000801 seconds.

1 tests, 2 assertions, 0 failures, 0 errors
megiddo:~/Projects jonathan$ ruby foo_test.rb
Loaded suite foo_test
Started
.
Finished in 0.000764 seconds.

1 tests, 2 assertions, 0 failures, 0 errors
megiddo:~/Projects jonathan$


-Jonathan


>> Try adding double quotes around the backtick like this:
>>
>> .expects(:"`").with("ls")
>>
>> -Jonathan
>>
>>
>>> --- Original Message ---
>>>> Bah, turned out to be a Merb reloading bug. Nevermind.
>>>>
>>>> On 6/11/07, Frederick Cheung <fred at 82ask.com> wrote:
>>>>>
>>>>> On 11 Jun 2007, at 23:19, Kevin Clark wrote:
>>>>>
>>>>>> This drives me insane on a regular basis. How does one mock
>>>>>> system('blah') or `blah` ?
>>>>>>
>>>>>> Adding expectations on Kernel doesn't do it. Adding  
>>>>>> expectations on
>>>>>> Object just makes me sad:
>>>>>>
>>>>>> Object.any_instance.expects(:system).with('ls')
>>>>>>   # => #<Mock:0x12b584e>.system('ls') - expected calls: 0, actual
>>>>>> calls: 1
>>>>>>
>>>>>> And this really shouldn't work (and doesn't):
>>>>>>
>>>>>> Object.expects(:system).with('ls')
>>>>>>   # => #<Mock:0x12f287a>.system('ls') - expected calls: 1, actual
>>>>>> calls: 0
>>>>>>
>>>>>> Anyone have a trick they like?
>>>>>
>>>>> system etc... are in a module that is included most places, so  
>>>>> if we
>>>>> have
>>>>>
>>>>> class Foo
>>>>>    def my_method_calling_system
>>>>>      system('echo "hello world"')
>>>>>    end
>>>>> end
>>>>>
>>>>> Then you need to do something like
>>>>>
>>>>> f = Foo.new
>>>>> f.expects(:system).
>>>>> f.my_method_calling_system
>>>>>
>>>>>
>>>>> I would have expected Object.any_instance.expects(:system) to work
>>>>> but a cursory attempt suggests it doesn;t
>>>>>
>>>>> Fred
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> mocha-developer mailing list
>>>>> mocha-developer at rubyforge.org
>>>>> http://rubyforge.org/mailman/listinfo/mocha-developer
>>>>>
>>>>
>>>>
>>>> --
>>>> Kevin Clark
>>>> http://glu.ttono.us
>>>> _______________________________________________
>>>> mocha-developer mailing list
>>>> mocha-developer at rubyforge.org
>>>> http://rubyforge.org/mailman/listinfo/mocha-developer
>>>
>>> _______________________________________________
>>> mocha-developer mailing list
>>> mocha-developer at rubyforge.org
>>> http://rubyforge.org/mailman/listinfo/mocha-developer
>>
>> _______________________________________________
>> mocha-developer mailing list
>> mocha-developer at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/mocha-developer
>>
>
>
> -- 
> Kevin Clark
> http://glu.ttono.us
> _______________________________________________
> mocha-developer mailing list
> mocha-developer at rubyforge.org
> http://rubyforge.org/mailman/listinfo/mocha-developer



More information about the mocha-developer mailing list