How do we create functional test when the model has association

1 view
Skip to first unread message

Joshua Partogi

unread,
Nov 20, 2009, 7:40:34 PM11/20/09
to rubyonra...@googlegroups.com
Hi all,

I want to test my controller, but unfortunately the model that has
association to other model. I already have setup the parameter in the
test code but encounter this error:
1) Error:
test_create(SprintsControllerTest):
ActiveRecord::StatementInvalid: SQLite3::SQLException:
sprints.project_id may not be NULL: INSERT
INTO "sprints"
("cancelled_date", "created_at", "end_date", "goal", "project_id",
"retrospective", "start_date", "updated_at")
VALUES (NULL, '2009-11-21 00:37:33.924413', '1901-01-01', 'Deliver
usable product', NULL, NULL, '1900-01-01', '2009-11-21
00:37:33.924413')

This is how my test code looks like:
assert_difference('Sprint.count') do
post(:create, :sprint => {:project_id => '9999', :goal =>
'Deliver usable product',
:start_date => '1900-01-01', :end_date
=> '1901-01-01'})
end

Have I setup the test code wrong? What am I missing here?

Thanks for the insights.

--
Certified Scrum Master
http://blog.scrum8.com | http://jobs.scrum8.com | http://twitter.com/scrum8

Frederick Cheung

unread,
Nov 21, 2009, 3:50:46 AM11/21/09
to Ruby on Rails: Talk
On Nov 21, 12:40 am, Joshua Partogi <joshua.part...@gmail.com> wrote:
>
> This is how my test code looks like:
> assert_difference('Sprint.count') do
>       post(:create, :sprint => {:project_id => '9999', :goal =>
> 'Deliver usable product',
>                                 :start_date => '1900-01-01', :end_date
> => '1901-01-01'})
>     end
>
> Have I setup the test code wrong? What am I missing here?
>
That looks reasonable. What is in the controller / model ?

Fred
> Thanks for the insights.
>
> --
> Certified Scrum Masterhttp://blog.scrum8.com|http://jobs.scrum8.com|http://twitter.com/scrum8

Joshua Partogi

unread,
Nov 22, 2009, 8:03:52 AM11/22/09
to rubyonra...@googlegroups.com
On Nov 21, 7:50 pm, Frederick Cheung <frederick.che...@gmail.com> wrote:
> On Nov 21, 12:40 am,JoshuaPartogi <joshua.part...@gmail.com> wrote:
>
> > This is how my test code looks like:
> > assert_difference('Sprint.count') do
> > post(:create, :sprint => {:project_id => '9999', :goal =>
> > 'Deliver usable product',
> > :start_date => '1900-01-01', :end_date
> > => '1901-01-01'})
> > end
>
> > Have I setup the test code wrong? What am I missing here?
>
> That looks reasonable. What is in the controller / model ?
>
> Fred

Hi Fred,

I removed the :sprint symbol and it magically works now. Hmmh.


Thanks.

--
Certified Scrum Master

Frederick Cheung

unread,
Nov 22, 2009, 8:32:57 AM11/22/09
to Ruby on Rails: Talk

On Nov 22, 1:03 pm, Joshua Partogi <joshua.part...@gmail.com> wrote:
> Hi Fred,
>
> I removed the :sprint symbol and it magically works now. Hmmh.
>
Just sounds like your test wasn't organising the parameters to pass in
the way that your app was expecting them.

Fred
> Thanks.
>
> --
> Certified Scrum Masterhttp://blog.scrum8.com|http://jobs.scrum8.com|http://twitter.com/scrum8

Jesse

unread,
Nov 21, 2009, 11:44:41 PM11/21/09
to Ruby on Rails: Talk
is it possible the form is passing the project_id parameter to the
controller as something else? maybe as project ?
submit the form from a browser and look at the development.log file
and see what the HTTP request looks like, my guess is something like

Processing SprintsController#create (for 127.0.0.1 at .....) [POST]
Parameters: {"action"=>"create", "authenticity_token"=>"....",
"method"=>"post", "controller"=>"sprints",
"sprint"=>{"goal"=>"...", "start_date"=>"...", "project"=>"..."}
}

Note the key project vs project_id, just guessing here but a good
place to start
> Certified Scrum Masterhttp://blog.scrum8.com|http://jobs.scrum8.com|http://twitter.com/scrum8
Reply all
Reply to author
Forward
0 new messages