Hi David and thanks again, I run Rspec 2.8.0. and just upgraded from Rails 3.0.10 to Rails 3.2.1.
I must admit, the spec wasn't clean. But it was quick and easy... Of course I keep your advice in mind, I just have to adapt to my particular case: * I work on a legacy and untested app, so factories require much time to be built * the callbacks run a lot of code which require I load plenty of data in the object, a bit overkill just to check whether or not the callback is triggered * I run a state machine and I want to be sure proper callbacks are called (or not) from one step to another, so there are many specs. I finally decided to redefine the callback content for the current object, since, in these particular specs, I don't care of what happens inside. I had to split my specs in two parts: context "initial status waiting_assignment" do before(:each) do document.instance_eval { def on_progress; yield; end } end it "check callback" do document.should_receive(:on_progress) document.status_progress end it "check transition" do document.status_progress document.status.should eq "in_progress" end end On Feb 24, 2:36 am, David Chelimsky <dchelim...@gmail.com> wrote: > On Feb 23, 2012, at 3:36 PM, apneadiving wrote: > > > I've just upgraded to Rails 3.2.1 and I can't get my specs checking > > whether or not around_save work anymore. > > What version did you upgrade from? Anything else change in the process? > > > I simply did something like: > > > object.should_receive :around_filter_name > > object.save.should be_true > > > (Actually, it was slightly more complex, it's part of a state machine) > > Mock objects (message expectations / should_receive) are for specifying > interaction _between objects_, not internal implementation of a single > object. There are plenty of guidelines that point in that direction, two of > which are explicitly violated in this example: > > 1. mock your own code, not your dependencies (in this case you're mocking > ActiveRecord internals) > 2. don't mock the subject of a test > > The motivation for both of these guidelines is exactly what you're > experiencing. Something changed out from under you and you have no idea what > and why your test doesn't work anymore. I'd recommend using a black block > approach for this instead of a message expectation: get the object into the > state you want, call object.save, and then specify the resulting state. > > HTH, > David > _______________________________________________ > 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