On Nov 12, 3:11 pm, David Chelimsky <dchelim...@gmail.com> wrote: > On Nov 12, 2010, at 7:23 AM, Ole Morten Amundsen wrote: > > > First of all, please direct me into how better to search existing threads > > in this mailing list. > > Not sure what you tried already, but:
Thanks, I didn't know about the google group. I used this http://rubyforge.org/pipermail/rspec-users/ > > http://groups.google.com/group/rspec > http://old.nabble.com/forum/Search.jtp?query=rspec-users+rspec+mocha > > And if all else fails > > http://www.google.com/search?q=rspec-users+rspec+mocha > > > > > > > > > > > Ok to my rspec 2.0.1 mocha 0.9.8 issue: > > > given a controller test > > before do > > subject.expects(:authenticate).once > > end > > > it "should bla bla" do > > pending "PENDING, shouldn't fail?" > > end > > > with > > config.mock_with :rspec > > it's ok: pending, but with > > config.mock_with :mocha > > if fails! > > > It expected the authenticate to be called. What do I have to do to make it > > compatible? > > > Reason for using mocha, is > > A: I'm used to it > > B: I don't know rspec mocks too well, but it notice that these mocks live > > across tests, breaking unrelated model specs. > > In the future, please be sure to say what versions of rails and ruby you're > using as well. > > My best guess is that this is a rails-3 app (because rspec-2 doesn't work > with rails-2 yet), and the mocha gem is configured in the Gemfile. Unless it > says ":require => false", mocha will be loaded regardless of which framework > you tell RSpec to use. Assuming this is all correct (or some other mechanism > is being used to configure/load the mocha gem), here's the deal: > > When you declare an example as pending _inside the example_, RSpec doesn't > know the example is pending until it runs the example, so its before blocks > are run. Because the mocha gem is loaded, the "expects" method is added to > all objects whether the configured framework is :rspec or :mocha, so the > before block is not raising an error when the configured mock framework is > :rspec, but then the mocha expectations are never verified. This is why it's > passing when configured with :rspec. > > The fact that it's failing when configured with :mocha is expected, since the > before block is being run. > > My recommendation has always been to avoid message expectations (expects in > mocha, should_receive in rspec) should never be used in before blocks, and > this is one of many reasons why. That said, if you want to declare a method > pending and ensure that the before blocks are not executed, then use either > of these alternatives: > > pending "should bla bla" do > .. > end > > it "should bla bla", :pending => true do > .. > end > > Both of these let RSpec know the example is pending before it is run, so > RSpec doesn't run the before blocks in these cases. Great answer! You rock David. I've tested both suggestions and they work perfectly. I guess I should stub, not mock, the authenticate method as I test this authentication (controller before_filter) in other tests. Thanks for the feedback. -oma > > HTH, > David > > > > > cheers! > > oma > > _______________________________________________ > rspec-users mailing list > rspec-us...@rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users