2013-03-10 2 views
0

У меня возникли проблемы с проверкой метода update_with_password, который я переопределил в моей модели User.RSpec + Devise + override update_with_password

Я использую Rails 3.2, Разрабатывает 2.2.3 и RSpec рельсы 2,13

Вот что моя модель пользователя update_with_password метод выглядит следующим образом:

#app/model/user.rb 

def update_with_password(params, *options) 
    if encrypted_password.blank? 
    update_attributes(params, *options) 
    else 
    super 
    end 
end 

Вот моя спецификация:

#spec/model/user_spec.rb 

describe "#update_with_password" do 
    context "when encrypted password is blank" do 

    before(:each) do 
     @user = FactoryGirl.build(:user_via_facebook) 
     @user.save(validate: false) 
     @facebook_profile = FactoryGirl.create(:facebook_profile, user: @user) 
    end 

    it "updates user attributes without asking current password" do 
     @user.update_with_password(params: {first_name: "New First Name"}) 
     @user.first_name.should eql "New First Name" 
    end 

    end 
end 

И это ошибка, которую я получаю после запуска спецификации:

User#update_with_password when encrypted password is blank updates user attributes without asking current password 
    Failure/Error: @user.update_with_password(params: {first_name: "New First Name"}) 
    ActiveModel::MassAssignmentSecurity::Error: 
     Can't mass-assign protected attributes: params 

Как проверить этот метод ?. Там чего-то не хватает, и я не могу понять это. Заранее спасибо.

ответ

1

Я думаю, что вы просто хотите

@user.update_with_password({first_name: "New First Name"}) 

вместо

@user.update_with_password(params: {first_name: "New First Name"}) 
+0

Спасибо Бен, это сработало! – edelpero

Смежные вопросы