On 5 Mar 2011, at 12:06, Hedge Hog wrote: > On Fri, Mar 4, 2011 at 8:12 PM, Matt Wynne <m...@mattwynne.net> wrote: >> >> On 4 Mar 2011, at 05:45, Hedge Hog wrote: >> >>> Hi, >>> I'm struggling with something that seems to be simple, and I've not >>> had any joy following the RSpec books suggestions (p. 187). >>> I'd like to test that a method raises and error when a file is not found. >>> I've tried adding this in my example just before I call my method, but >>> it never seems to get invoked. >>> Pathname.stub(:exist?).and_return(false) >> >> That's stubbing a class method. >> >> exist? is an instance method so you need to stub the specific instance of >> pathname that's being used in your object-under-test, rather than the >> Pathname class. >> > > Is there a (clean) way to intercept this instance and add the > stub/mock to it? What I see in the Rspec books suggests I'd have to > force the Pathname instance to the surface, as some method argument. > That feels all wrong - to have to change my method's interface just to > test a behavior. > > Appreciate any experience, comments or suggestions people may have.
You could try something like this: fake_pathname = double(Pathname, :exist? => false) Pathname.stub(:new).and_return(fake_pathname) This is basically The Ruby Way of doing dependency injection. > >>> >>> The whole example: >>> >>> it "should raise an error if RVM's install root does not exist" do >>> Pathname.stub(:exist?).and_return(false) >>> lambda{ B3::Bdd::Helpers.rvm_path}.should >>> raise_error(RuntimeError, "File not found:") >>> end >>> >>> Appreciate any tips. >>> >>> -- >>> πόλλ' οἶδ ἀλώπηξ, ἀλλ' ἐχῖνος ἓν μέγα >>> [The fox knows many things, but the hedgehog knows one big thing.] >>> Archilochus, Greek poet (c. 680 BC – c. 645 BC) >>> http://wiki.hedgehogshiatus.com >>> _______________________________________________ >>> rspec-users mailing list >>> rspec-users@rubyforge.org >>> http://rubyforge.org/mailman/listinfo/rspec-users >> >> cheers, >> Matt >> >> m...@mattwynne.net >> 07974 430184 >> >> _______________________________________________ >> rspec-users mailing list >> rspec-users@rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users > > > > -- > πόλλ' οἶδ ἀλώπηξ, ἀλλ' ἐχῖνος ἓν μέγα > [The fox knows many things, but the hedgehog knows one big thing.] > Archilochus, Greek poet (c. 680 BC – c. 645 BC) > http://wiki.hedgehogshiatus.com > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users cheers, Matt m...@mattwynne.net 07974 430184 _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users