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

Reply via email to