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
before(:each) do
@account = mock_model(Account, :to_param => "1")
Account.stub!(:new).and_return(@account)
controller.stub!(account_url).and_return(“redirect_value”)
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.
So stub it out, see above.
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
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.