Trouble Testing a Controller With RSpec

Hello-

I’ve been staring that this problem for hours with no success. What
I’m trying to do is pretty simple. I’m trying to test the create
method of a controller.

Here is the create method:

POST /accounts

def create
@account = Account.new(params[:account])

respond_to do |format|
  if @account.save
    flash[:notice] = 'Account was successfully created.'
    format.html { redirect_to account_url }
  else
    format.html { render :action => "new" }
  end
end

end

My Account class only has two fields: name and subdomain.

Here is the code for my test:

before(:each) do
  @account = mock_model(Account, :to_param => "1")
  Account.stub!(:new).and_return(@account)
end

def do_post
  @account.should_receive(:save).and_return(true)
  post :create, :account => { :subdomain => 'test' }
end

My test is failing because of the line in my controller “format.html
{ redirect_to account_url }”. I’m using the account location plugin
and when the account_url method is called, it is looking for
@account.subdomain, which is not set. In fact, any parameters I pass
in to the call to “post” in my test seem to be ignored.

Am I doing something wrong? Thanks in advance.

-Eric

On Sun, Aug 17, 2008 at 1:56 PM, emarthinsen
[email protected]wrote:

before(:each) do
@account = mock_model(Account, :to_param => “1”)
Account.stub!(:new).and_return(@account)

    controller.stub!(account_url).and_return("redirect_value")

@account.subdomain, which is not set.
So stub it out, see above.


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

Hi Rick. Thanks for the reply. Is stubbing that out a hack or the best
way to appraoch this. I’m worried that by stubbing out the account_url
method, I won’t be testing whether or not the account_url method is
properly accessing @account or that @acount is being preoperly set
from the params. Granted, a case could be made that those are separate
tests or are unnecessary (given that testing params is more testing
Rails than my code). What are our thoughts? Thanks again.

-Eric

On Sun, Aug 17, 2008 at 4:28 PM, emarthinsen
[email protected]wrote:

Hi Rick. Thanks for the reply. Is stubbing that out a hack or the best
way to appraoch this. I’m worried that by stubbing out the account_url
method, I won’t be testing whether or not the account_url method is
properly accessing @account or that @acount is being preoperly set
from the params. Granted, a case could be made that those are separate
tests or are unnecessary (given that testing params is more testing
Rails than my code). What are our thoughts? Thanks again.

I’d consider the account_url helper to be part of rails, and in any case
outside of the scope of this controller’s spec.

In your original post you mentioned a plugin which seems to be affecting
account_url, in which case I’d expect this to be specified in the
tests/specs for that plugin.


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/