test Couldn't find User without an ID

I am trying to run this test
setup do

    @comment = comments(:hello)
    @comment.commenter = "cleb"
    @comment.body = "hello"
    @comment.user_id = 1

  end
test "should create comment" do

    assert_difference('Comment.count') do
      post :create, :comment => @comment.attributes
    end

    assert_redirected_to comment_path(assigns(:comment))
  end

It comes up with

test_should_create_comment(CommentsControllerTest):
ActiveRecord::RecordNotFound: Couldn't find User without an ID

This is from comments.yml

hello:
  commenter: cleb
  body: hello
  user_id: 1

This is from comments.controller

  def create
    @cuser = @current_user
    @user = User.find(params[:user_id])
    @user.comments.create(:user_id => @user.id, :commenter =>
@cuser.login, :body => params[:comment][:body])
    respond_to do |format|
     format.js
     format.html {redirect_to user_path}
    end
  end

What am I doing wrong?

Check the params[:user_id] i think it was nil

Ahmy Yulrizka

Cpx Cpx wrote in post #1053539:

Check the params[:user_id] i think it was nil

Ahmy Yulrizka

So it is. How can I introduce a user in the fixtures or setup to give it
a value?

This line:
post :create, :comment => @comment.attributes

The second parameter (hash) is the content of params in your controller. So basically your params[:comment] would be @comment.attributes

So if you expected params[:user_id] then you should pass it to the post call

Ahmy Yulrizka

Cpx Cpx wrote in post #1053588:

This line:
post :create, :comment => @comment.attributes

The second parameter (hash) is the content of params in your controller.
So
basically your params[:comment] would be @comment.attributes

So if you expected params[:user_id] then you should pass it to the post
call

Ahmy Yulrizka

:user_id is one of the attributes

  setup do
    @comment = comments(:hello)
    @comment.commenter = "cleb"
    @comment.body = "hello"
    @comment.user_id = 1
  end

Neil

so basically its not params[:user_id] it’s params[:comment][:user_id]
Ahmy Yulrizka

Cpx Cpx wrote in post #1053588:

This line:
post :create, :comment => @comment.attributes

The second parameter (hash) is the content of params in your controller.
So
basically your params[:comment] would be @comment.attributes

So if you expected params[:user_id] then you should pass it to the post
call

Ahmy Yulrizka

This did it

assert_difference('Comment.count') do
      post :create, :comment => @comment.attributes, :user_id => 2
    end

Neil