I''m unsure why this test is still failing. I''ve tested it in console and the code works as expected. Is there something wrong with how I have my test written? ****************** error 1) Job selecting the next job to be processed should lock the next job Failure/Error: job.should_receive(:update_attribute).with(:locked, true) (#<Job:0x105496488>).update_attribute(:locked, true) expected: 1 time received: 0 times ****************** job_spec.rb it "should lock the next job" do job = Factory(:job, :locked => false) job.should_receive(:update_attribute).with(:locked, true) Job.next end ****************** job.rb def self.next job = incomplete.unlocked.prioritized.limit(1).first job.lock! if job job end def lock! update_attribute(:locked, true) end def unlock! update_attribute(:locked, false) end
David Chelimsky
2010-Jul-22 16:03 UTC
[rspec-users] should_receive test unexpectedly failing
On Jul 22, 2010, at 10:48 AM, ericindc wrote:> I''m unsure why this test is still failing. I''ve tested it in console > and the code works as expected. Is there something wrong with how I > have my test written? > > ****************** error > > 1) Job selecting the next job to be processed should lock the next job > Failure/Error: job.should_receive(:update_attribute).with(:locked, > true) > (#<Job:0x105496488>).update_attribute(:locked, true) > expected: 1 time > received: 0 times > > > ****************** job_spec.rb > > it "should lock the next job" do > job = Factory(:job, :locked => false) > job.should_receive(:update_attribute).with(:locked, true) > Job.next > end > > > ****************** job.rb > > def self.next > job = incomplete.unlocked.prioritized.limit(1).firstThis job object is not the same object as the on in the spec. To get this to work, you''d have to stub like so: Job.stub_chain(:incomplete, :unlocked, :prioritized, :limit).and_return(job) Personally, I wouldn''t bother, especially since you''re using a real db backed object anyhow (Factory(:job ...)). I''d just write the spec like this: job = Factory(:job, :locked => false) job.next job.should_not be_locked Much cleaner and to the point, and less invasive (and therefore less brittle). HTH, David> job.lock! if job > job > end > > def lock! > update_attribute(:locked, true) > end > > def unlock! > update_attribute(:locked, false) > end > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users