rayscook-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
2009-May-08 02:16 UTC
SiteControllerTest error. <nil> expected to not be nil
I have been following a tutorial from a (semi-outdated) textbook describing how to create a rails social networking app. I have reached the testing phase and have encountered an error I can''t seem to solve. It originates from an asset call in the site_controller_test.rb file. Error message: 1) Failure: test_registration_success<SiteControllerTest> [test/functional/ site_controller_test.rb:49]: <nil> expected to not be nil. 4 tests, 9 assertions, 1 failures, 0 errors site_controller_test.rb: require File.dirname(__FILE__) + ''/../test_helper'' require ''site_controller'' # Re-raise errors caught by the controller. class SiteController; def rescue_action(e) raise e end; end class SiteControllerTest < ActionController::TestCase def setup @controller = SiteController.new @request = ActionController::TestRequest.new @response = ActionController::TestResponse.new end # Replace this with your real tests. def test_truth assert true end def test_index get :index title = assigns(:title) assert_equal "The Water Cooler Site", title assert_response :success assert_template "index" end # Make sure the registration page responds with the proper form. def test_registration_page get :register title = assigns(:title) assert_equal "Registration Page", title assert_response :success assert_template "register" end # Test a valid registration. def test_registration_success post :register, :user=>{ :user_name => "rayjay6295", :email => "raycook-noVtnmiAkQo@public.gmane.org", :password => "password"} # Test assignment of user. user = assigns(:user) assert_not_nil user # Test new user in database. new_user = User.find_by_user_name_and_password(user.user_name, user.password) assert_not_nil new_user assert_equal new_user, user # Test flash and redirect. assert_equal "User #{new_user.user_name} created!", flash[:notice] assert_redirected_to :action => "index" end end //////////////////////////////////////////////////////////////////// site_controller.rb: class SiteController < ApplicationController def index @title= "The Water Cooler Site" end def personal_page @title = "Welcome, YOUR NAME HERE" end def register @title = "Registration Page" if request.post? @user = User.new(params[:user]) if @user.save flash[:notice] = "User #{@user.user_name} created!" redirect_to :action => "index" end end if request.post? # Output goes to log file (logs/development.log in development mode) logger.info params[:user].inspect end #if request.post? #Output goes to browser #raise params[:user].inspect #end end protect_from_forgery :only => [:create, :update, :destroy] end ///////////////////////////////////////////// from databse.yml: development: adapter: mysql encoding: utf8 reconnect: false database: watercooler_development pool: 5 username: root password: MyNewPass host: localhost test: adapter: mysql encoding: utf8 reconnect: false database: watercooler_test pool: 5 username: root password: MyNewPass host: localhost /////////////////////////////////////////// create_users.rb: class CreateUsers < ActiveRecord::Migration def self.up create_table :users do |t| t.column :user_name, :string t.column :first_name, :string t.column :last_name, :string t.column :fav_show, :string t.column :email, :string t.column :password, :string t.timestamps end end def self.down drop_table :users end end /////////////////////////////////////////////////// register.html.erb: <h2>Register</h2> <% form_for :user do |form| %> <fieldset> <legend>Enter Your Details</legend> <%= error_messages_for "user" %> <div class="form_row"> <label for="user_name">User Name:</label> <%= form.text_field :user_name, :size => User::USER_NAME_SIZE, :maxlength => 40 %> </div> <div class="form_row"> <label for="email">Email:</label> <%= form.text_field :email, :size => User::EMAIL_SIZE, :maxlength => 50 %> </div> <!-- Need password compare stuff --> <div class="form_row"> <label for="password">Password:</label> <%= form.password_field :password, :size => User::PASSWORD_SIZE, :maxlength => 40 %> </div> <!-- Need password compare stuff --> <div class="form_row"> <label for="password">Re-type Password:</label> <%= form.password_field :password, :size => User::PASSWORD_SIZE, :maxlength => 40 %> </div> <div class="form_row"> <label for="first_name">First Name:</label> <%= form.text_field :first_name, :size => User::FIRST_NAME_SIZE, :maxlength => 40 %> </div> <div class="form_row"> <label for="last_name">Last Name:</label> <%= form.text_field :last_name, :size => User::LAST_NAME_SIZE, :maxlength => 40 %> </div> <div class="form_row"> <label for="user_name">Favorite TV Show:</label> <%= form.text_field :fav_show, :size => User::FAV_SHOW_SIZE, :maxlength => 40 %> </div> <div class="button"> <%= submit_tag "Register!", :class => "submit" %> </div> </fieldset> <% end %> //////////////////////////////////// Thanks for any help. It seems like it can retrieve a user from the post method fine, but once it tries to either insert or pull from the database it runs into trouble.
Colin Law
2009-May-09 15:59 UTC
Re: SiteControllerTest error. <nil> expected to not be nil
Did you know that it is possible to use the debugger when testing? This can be very useful sometimes as you can break into your code during the test and see what is happening. Colin 2009/5/8 rayscook-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org <raycook-noVtnmiAkQo@public.gmane.org>> > I have been following a tutorial from a (semi-outdated) textbook > describing how to create a rails social networking app. I have reached > the testing phase and have encountered an error I can''t seem to solve. > It originates from an asset call in the site_controller_test.rb file. > > Error message: > > 1) Failure: > test_registration_success<SiteControllerTest> [test/functional/ > site_controller_test.rb:49]: > <nil> expected to not be nil. > > 4 tests, 9 assertions, 1 failures, 0 errors > > site_controller_test.rb: > > require File.dirname(__FILE__) + ''/../test_helper'' > require ''site_controller'' > > > # Re-raise errors caught by the controller. > class SiteController; def rescue_action(e) raise e end; end > > class SiteControllerTest < ActionController::TestCase > def setup > @controller = SiteController.new > @request = ActionController::TestRequest.new > @response = ActionController::TestResponse.new > end > # Replace this with your real tests. > def test_truth > assert true > end > > def test_index > get :index > title = assigns(:title) > assert_equal "The Water Cooler Site", title > assert_response :success > assert_template "index" > end > > # Make sure the registration page responds with the proper form. > def test_registration_page > get :register > title = assigns(:title) > assert_equal "Registration Page", title > assert_response :success > assert_template "register" > end > > > # Test a valid registration. > def test_registration_success > post :register, :user=>{ :user_name => "rayjay6295", > > :email => "raycook-noVtnmiAkQo@public.gmane.org", > > :password => "password"} > # Test assignment of user. > user = assigns(:user) > assert_not_nil user > # Test new user in database. > > new_user > User.find_by_user_name_and_password(user.user_name, > > user.password) > assert_not_nil new_user > assert_equal new_user, user > # Test flash and redirect. > assert_equal "User #{new_user.user_name} created!", > flash[:notice] > assert_redirected_to :action => "index" > end > end > > //////////////////////////////////////////////////////////////////// > > site_controller.rb: > > class SiteController < ApplicationController > def index > @title= "The Water Cooler Site" > end > > def personal_page > @title = "Welcome, YOUR NAME HERE" > end > > def register > @title = "Registration Page" > if request.post? > @user = User.new(params[:user]) > if @user.save > flash[:notice] = "User #{@user.user_name} > created!" > redirect_to :action => "index" > end > end > if request.post? > # Output goes to log file (logs/development.log in > development > mode) > logger.info params[:user].inspect > end > #if request.post? > #Output goes to browser > #raise params[:user].inspect > #end > end > > > protect_from_forgery :only => [:create, :update, :destroy] > end > ///////////////////////////////////////////// > > from databse.yml: > > development: > adapter: mysql > encoding: utf8 > reconnect: false > database: watercooler_development > pool: 5 > username: root > password: MyNewPass > host: localhost > > test: > adapter: mysql > encoding: utf8 > reconnect: false > database: watercooler_test > pool: 5 > username: root > password: MyNewPass > host: localhost > > /////////////////////////////////////////// > > create_users.rb: > > class CreateUsers < ActiveRecord::Migration > def self.up > create_table :users do |t| > t.column :user_name, :string > t.column :first_name, :string > t.column :last_name, :string > t.column :fav_show, :string > t.column :email, :string > t.column :password, :string > t.timestamps > end > end > > def self.down > drop_table :users > end > end > /////////////////////////////////////////////////// > > register.html.erb: > > <h2>Register</h2> > <% form_for :user do |form| %> > <fieldset> > <legend>Enter Your Details</legend> > <%= error_messages_for "user" %> > <div class="form_row"> > <label for="user_name">User Name:</label> > <%= form.text_field :user_name, :size => > User::USER_NAME_SIZE, :maxlength => 40 %> > </div> > <div class="form_row"> > <label for="email">Email:</label> > <%= form.text_field :email, :size => > User::EMAIL_SIZE, :maxlength > => 50 %> > </div> > <!-- Need password compare stuff --> > <div class="form_row"> > <label for="password">Password:</label> > <%= form.password_field :password, :size => > User::PASSWORD_SIZE, :maxlength => 40 %> > </div> > <!-- Need password compare stuff --> > <div class="form_row"> > <label for="password">Re-type Password:</label> > <%= form.password_field :password, :size => > User::PASSWORD_SIZE, :maxlength => 40 %> > </div> > > <div class="form_row"> > <label for="first_name">First Name:</label> > <%= form.text_field :first_name, :size => > User::FIRST_NAME_SIZE, :maxlength => 40 %> > </div> > > <div class="form_row"> > <label for="last_name">Last Name:</label> > <%= form.text_field :last_name, :size => > User::LAST_NAME_SIZE, :maxlength => 40 %> > </div> > > <div class="form_row"> > <label for="user_name">Favorite TV Show:</label> > <%= form.text_field :fav_show, :size => > User::FAV_SHOW_SIZE, :maxlength => 40 %> > </div> > > <div class="button"> > <%= submit_tag "Register!", :class => "submit" %> > </div> > </fieldset> > <% end %> > > //////////////////////////////////// > > Thanks for any help. It seems like it can retrieve a user from the > post method fine, but once it tries to either insert or pull from the > database it runs into trouble. > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---