On 8/23/07, s.ross <[EMAIL PROTECTED]> wrote: > I want to use mocks and stubs to test the controller, but am having > trouble getting my validation not to trigger. Here's the code: > > # spec: > > Image.stub!(:find).and_return(@image) > @image.should_receive(:save!).once.with(:any_args) > put :update, :id => @image.id, :category_id => > @category.id, :image => {:name => 'test', :image_number => 13554} > > #model > > validates_presence_of :name > validates_uniqueness_of :name, :allow_nil => true > > # rspec output > > ActiveRecord::RecordInvalid in 'ImagesController should update a > database record when it receives a PUT' > Validation failed: Name has already been taken, Image number has > already been taken > > > It seems AR is not detecting that this is an edit/update that will > not cause a uniqueness conflict. I believe the code in the model > needs to remain in place because I don't want a user creating a name > conflict by editing an existing name into one that already exists in > the database. Any thoughts on how better to spec this? > > Thanks > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
As others have said, return a mock object instead of an actual AR object. You don't really care what the underlying implementation is, only that particular methods get called. Pat _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users