[rspec-users] controller spec with model that validates_uniqueness

Pat Maddox pergesu at gmail.com
Thu Aug 23 22:55:45 EDT 2007

On 8/23/07, s.ross <cwdinfo at gmail.com> 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 at 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.


More information about the rspec-users mailing list