On Thu, May 19, 2011 at 1:18 PM, S Ahmed <sahmed1...@gmail.com> wrote:

> My user controllers 'create' action looks like:
>
>
> def create
>   @user = User.new(params[:user])
>
>   @user.user_name = params[:user][:user_name]
>    @user.email = params[:user][:email]
>
>   if @user.is_valid?
>      @user.status = 2
>      @user.save!
>
>       UserMailer.new_user(@user).deliver
>
>      redirect_to(@user, :notice => "user was created successfully")
>   else
>      render :action => 'new'
>
>   end
>
>
> end
>
>
>
> My test is:
>
>
> describe "POST 'create' do
>   it "should be successful" do
>
>     user = mock_model(user)
>     user.sub(:new).and_return(user)
>
>     post 'create'
>     response.should redirect_to(user)
>
>   end
>
> end
>
>
> error:
>
>  Failure/Error: post 'create'
>      NoMethodError:
>        You have a nil object when you didn't expect it!
>        You might have expected an instance of ActiveRecord::Base.
>        The error occurred while evaluating nil.[]
>      # ./app/controllers/users_controller.rb:44:in `create'
>      # ./spec/controllers/users_controller_spec.rb:81
>
>
> _______________________________________________
> rspec-users mailing list
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>


Hello. nil.[] means the code is trying to call an array getter method
(the_array[the_index]) on nil. In the action, "params[:user][:user_name]" is
causing the error because there is no ":user" key in "params". Here is how
you want to invoke the request:

post :create, :user => {:user_name => 'foo', :email => 't...@example.com'}

Hope that fixes it.
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to