dimanche 14 août 2016

Rails login test - Fixtures not updated?

In my application user after logging arrives +1 experience. I am trying to write a test that checks whether the experience certainly has been added.

User model:

def add_experience(how)
    update_attribute(:experience, experience + how)
 end

Session helper:

def log_in(user)
    session[:user_id] = user.id
    user.add_experience(1)
 end

and Session Controller

def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      flash[:success] = "Success!"
      log_in user
      params[:session][:remember_me] == '1' ? remember(user) : forget(user)
      redirect_to root_path
    else
      flash.now[:danger] = 'Ups!' 
      render 'static_pages/home'
    end
  end

After logging in actually adds experience points, but test out the error:

"@user.experience" didn't change by 1.
Expected: 1
  Actual: 0

Test login:

def setup
    @user = users(:example)
 end

test "example login test" do
    get root_path
    assert_difference '@user.experience', 1 do
    post login_path, params: { session: { email:    @user.email,
                                          password: 'password' } }
    end
end

Fixtures:

example:
  name: Example name
  email: ex@example.com
  password_digest: <%= User.digest('password') %>
  experience: 0

Aucun commentaire:

Enregistrer un commentaire