how to fix assigns(:user) on controller test

Discussion in 'Ruby' started by OnRails Ruby, Sep 9, 2007.

  1. OnRails Ruby

    OnRails Ruby Guest

    Hi everyon,
    Thank you for your help!
    I did the controller test, but there is a problem when run the test.

    Controller.rb:

    def change_password
    user = current_user
    if User.authenticate(user.login, params[:eek:ld_password])
    if (params[:password] == params[:password_confirmation])
    user.password_confirmation = params[:password_confirmation]
    user.password = params[:password]
    if user.save
    result = _("Password changed!")
    reset_current_user(user.id)
    else
    ("Could not save change, please try again.")
    end
    else
    result = _("Your passwords do not match.")
    @old_password = params[:eek:ld_password]
    end
    else
    result = _("Your old password is incorrect.")
    end
    end

    the controller_test.rb:

    def test_should_allow_password_change
    post :change_password, { :eek:ld_password => '123', :password =>
    'newpassword', :password_confirmation => 'newpassword'},
    {:user_id=>users:)user1).id}
    assert_equal 'newpassword', assigns:)user).password
    end

    when I run this test, There always said,
    NoMetodError: You have a ni object when you didn't expect it:
    the error occurred while evaluating nil.password.

    I have try to use:
    assert_equal 'newpassword', assigns('user').password
    assert_equal 'newpassword', assigns[:user].password
    assert_equal 'newpassword', assigns['user'].password

    but there is same problem. I don't know why?
    Please help1
    Thanks!
     
    OnRails Ruby, Sep 9, 2007
    #1
    1. Advertisements

  2. OnRails Ruby

    James Hunt Guest

    Are you using fixtures for your tests? (I assume you are, from the
    assigns() usage).

    Can you post the fixtures?
    You're welcome
     
    James Hunt, Sep 9, 2007
    #2
    1. Advertisements

  3. OnRails Ruby

    OnRails Ruby Guest

    the fixtures file is:
    user1:
    id: 1
    login: testuser1
    user_name:asb
    password: 123
    created_at: 2006-04-12 14:30:25
    user2:
    id: 2
    login: testuser2
    user_name:asb123
    password: 123
    created_at: 2006-04-12 14:30:25
     
    OnRails Ruby, Sep 9, 2007
    #3
  4. OnRails Ruby

    James Hunt Guest

    Therein lies your problem. You don't have a data item in your
    fixture'd database called 'user', only 'user1' and 'user2'

    Try
    assert_equal 'newpassword', assigns:)user1).password
     
    James Hunt, Sep 9, 2007
    #4
  5. But did you try:
    assert_equal 'newpassword', assigns:)user).password

    and you actually do assign to @user in the controller, right?

    -Rob

    Rob Biedenharn http://agileconsultingllc.com
     
    Rob Biedenharn, Sep 9, 2007
    #5
  6. OnRails Ruby

    James Hunt Guest

    But did you try:
    I can't believe I completely missed the point of this post. No more
    posting on < 3 hours of sleep :-D
     
    James Hunt, Sep 9, 2007
    #6
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.