[rspec-users] RSpec and Factory Girl: Destroying an object

Pat Maddox mailinglists at patmaddox.com
Fri May 14 11:27:30 EDT 2010


On May 14, 2010, at 8:09 AM, Daniel Salmeron Amselem wrote:

> Hi,
> 
> I have a problem when testing the deletion of a record from the
> database. I am using RSpec methods to check if my account object is
> being destroyed.
> 
> The factory creates an account object and saves it into the DB. Also
> the two should_receive expectations seem to work.
> 
> The problem is that when checking the database after the
> "delete :destroy, :id => account" line, the account record still
> exists.
> 
> 
>    it "should be able to destroy an account" do
>      account = Factory(:account)
>      Account.should_receive(:find).and_return(account)
>      account.should_receive(:destroy)
> 
>      delete :destroy, :id => account
> 
>      Account.all.should == []
>      response.should be_success
>      response.should render_template("new")
>    end
> 
>  # app/controllers/accounts_controller.rb
>  def destroy
>    account = Account.find(params[:id])
>    account.destroy
> 
>    redirect_to accounts_path
>  end
> 
> I hope someone can help me on this one.

You've mocked out the call to destroy, which hides the original implementation.  Pick either a state-based test (checking the database, don't use mocks) or mock-based test, but don't mix and match.

Pat


More information about the rspec-users mailing list