工厂女孩:尽管属性有效,用户验证失败(使用act作为标记宝石)

时间:2015-11-14 13:08:12

标签: validation rspec factory-bot

我在运行user_controller_spec.rb时收到此错误

  Failure/Error: login_member
    ActiveRecord::RecordInvalid:
    Validation failed: User tag list You need to provide at least 5 interests

以下代码导致我的测试失败。更具体地说,该行" login_member"

在user_controller_spec.rb

 before(:example) do
   login_member
   @user = @member.user
   @another_user = create(:another_user)
 end  

这是我的工厂设置。您可以看到使用成员

创建用户

Factories.rb

factory :member do
   email { Faker::Internet.email }
   password 'fidelio'
   password_confirmation 'fidelio'
   confirmed_at Time.now
   association :user
 end

 factory :user do
  first_name "Simon"
  last_name "Walsh"
  country "GB"
  tag_list = "Sarcoidosis, Clinical trials, Emphysema, Bronchitis, Idiopathic pulmonary fibrosis"
 end

以下助手记录成员

在spec_helpers.rb

def login_member
   @request.env["devise.mapping"] = Devise.mappings[:member]
   @member = create (:member)
   sign_in @member
end

这是我的用户类中的验证代码。我只在更新时指定了它。

在user.rb

  validate :check_minimum_tags, on: :update

  def check_minimum_tags
   errors.add(:tag_list, 'You need to provide at least 5 interests') unless tag_list.count > 4
  end

我不确定

  1. 为什么会因为创建关联用户而不是更新错误而引发错误

  2. 为什么要提升它......你可以看到我在" tag_list"中指定了5个兴趣点。 (使用带有标记宝石的行为)

  3. 我也尝试使用兴趣数组而不是字符串

1 个答案:

答案 0 :(得分:0)

答案发现.....我工厂的语法错误。

应该是

factory :user do
  first_name "Simon"
  last_name "Walsh"
  country "GB"
  tag_list "Sarcoidosis, Clinical trials, Emphysema, Bronchitis, Idiopathic pulmonary fibrosis"
end

白痴