Rspec使用用户ID扩展基本用户测试

时间:2015-05-05 13:41:33

标签: ruby-on-rails rspec

我正在尝试建立一些现有的测试,但我不确定如何处理我需要的语法。我的用户有诊断信息,很像帖子概念。我正在尝试为模型编写一个测试,该模型检查如果用户存在id,那么它将被分配,因此它将是一个有效的用户。我理解为了检查用户是否有效,我需要做类似以下的事情:

 user = FactoryGirl.create(:user)
 expect(user).to be_valid

我的困惑是如何在此基础上构建并检查存在具有id的用户是否将被分配诊断信息。

DiagnosticInfo模型:

class DiagnosticInfo
  include Mongoid::Document
  include Mongoid::Timestamps

  default_scope where(completed_at: nil)

  belongs_to :user 
  field :data, type: Hash
  field :user_id, type: Integer
  field :notes, type: String
  field :completed_at, type: DateTime

  validates :data, presence: true

  before_create :assign_user

  index created_at: 1

  def complete
    touch :completed_at
  end

  private 

  def assign_user
    if user_id
      user = User.where(auth_system_user_id: self.user_id).first
      self.user = user 
    end
  end
end

1 个答案:

答案 0 :(得分:1)

这样做的正确方法是确保User模型中的验证确保存在相应的DiagnosticInfo

然后在测试中,使用工厂创建User。除非创建了相应的DiagnosticInfo记录,否则确保它无效。

u = create(:user)
expect(u).not_to be_valid
# Some code that creates a diagnostic info
expect(u).to be_valid