Functional tsts

Hi all,

  I have created projects module in my application using scaffold, 

and it created me everything, and all the modules are working except the
functional test. This is the error

  1. Failure:
    test_create(ProjectsControllerTest)
    [test/functional/projects_controller_test.rb
    :55]:
    Expected response to be a <:redirect>, but was <200>

8 tests, 25 assertions, 1 failures, 0 errors

50 def test_create
51 num_projects = Project.count
52
53 post :create, :project => {}
54
55 assert_response :redirect
56 assert_redirected_to :action => ‘list’
57
58 assert_equal num_projects + 1, Project.count
59 end

Thanks in Advance

-Harish

Naga Harish K. wrote:

Hi all,

  I have created projects module in my application using scaffold, 

and it created me everything, and all the modules are working except the
functional test. This is the error

  1. Failure:
    test_create(ProjectsControllerTest)
    [test/functional/projects_controller_test.rb
    :55]:
    Expected response to be a <:redirect>, but was <200>

8 tests, 25 assertions, 1 failures, 0 errors

50 def test_create
51 num_projects = Project.count
52
53 post :create, :project => {}
54
55 assert_response :redirect
56 assert_redirected_to :action => ‘list’
57
58 assert_equal num_projects + 1, Project.count
59 end

Thanks in Advance

-Harish

Hi Harish. So, your create method in projects_controller.rb is not
redirecting like you expected it to.

Do you maybe have some validation in the project.rb model that is
preventing the creation of a new project with no attributes?

If you post the relevant bit of projects_controller.rb and you
project.rb model it would make it easier to see what’s gone wrong.

Robert J.

Surely Robert J.,

I'm sending you the piece of code.

project.rb::

class Project < ActiveRecord::Base
belongs_to:user
has_many:pictures
validates_presence_of :name,:with => //,:message => "is Invalid "
validates_presence_of :description,:with => //,:message => "is Invalid
"
end

projects_controller.rb::

def create
@project = Project.new(params[:project])
if @project.save
flash[:notice] = ‘Project was successfully created.’
redirect_to :action => ‘list’
else
render :action => ‘new’
end
end

~Harish

The line in your test doesn’t give the values needed. I think you
should have something like:

post :create, :project => { :name => ‘A name’, :description => ‘This
is a description’ }

Instead of:

post :create, :project => {}

On 7/6/06, Jordan E. [email protected] wrote:

The line in your test doesn’t give the values needed. I think you
should have something like:

post :create, :project => { :name => ‘A name’, :description => ‘This
is a description’ }

Instead of:

post :create, :project => {}

This is exactly correct, project.save is failing because of the
validates_presence_of. But you’re on to a good point about testing,
you should be doing negative and positive tests to make sure that when
it fails it does exactly what you want it to. So keep the test you
have and add a new test that checks valid input as well. Woot, two
tests for the price of one!

Cheers,
Chuck V.

Chuck V. wrote:

This is exactly correct, project.save is failing because of the
validates_presence_of.

Hi,

I removed the “validates_presence_of” then i got working good.

Thanku very much…

~Harish

Well, don’t forget to put it back in. You see, your tests were
actually working correctly - they were telling you that your code,
the code being tested, is not functioning as you expected it to.
Perhaps it would have been better to rename your test to indicate
that you are expecting it to get a 200 response, and then write
another test to check out whether or not the redirect is happening?

Hope that helps


Peter Wright
[email protected]

Personal Blog → http://peterwright.blogspot.com
Agile Development Blog → http://exceeding-expectations.blogspot.com