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


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 =     @request =     @response =   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 => "",                   :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



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       @user =[:user])       if         flash[:notice] = "User #{@user.user_name} created!"         redirect_to :action => "index"       end     end     if       # Output goes to log file (logs/development.log in development mode) params[:user].inspect     end     #if       #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



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 ///////////////////////////////////////////////////


<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.

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.