【问题标题】:FactoryGirl & Mongoid embedded_in and build_listFactoryGirl & Mongoid Embedded_in 和 build_list
【发布时间】:2012-05-02 21:56:22
【问题描述】:

问题

好的,我遇到的问题是 FactoryGirl 在我的测验中构建嵌入式作业,它使用 mongo 而不是活动记录。我尝试使用适用于我的活动记录模型的 build_list,但我在使用 mongoid 时遇到了问题...

我可以调用以下命令并取回 quiz_assignments:

@quiznos.quiz_assignments.new(due_at: Time.now+ 1.day, published_at: Time.now)

但是如果我打电话

@quiznos = FactoryGirl.build(:quizWassignments)

@quiznos 将创建一个测验,但 @quiz.quiz_assignments == []

我什至可以运行以下命令并过去

@quiz = FactoryGirl.build(:quiz)
@quiznos = FactoryGirl.build(:quiz_assignment, quiz: @quiz)
@quiz.quiz_assignments.should == [@quiznos]

问题

有没有办法让它与 :quizWassignments 一起使用?

代码

class Quiz
  include Mongoid::Document
  include Mongoid::Timestamps
  field :user_id
  field :title
  field :description
  field :assignment_id
  field :due_at, :type => DateTime
  field :published_at, :type => DateTime
  embeds_many :quiz_assignments
end

class QuizAssignment
  include Mongoid::Document
  include Mongoid::Timestamps 
  field :due_at, :type => DateTime
  field :published_at, :type => DateTime
  embedded_in :quiz
  embeds_many :quiz_assignees
  validates_presence_of :due_at, :published_at
  validates_associated :quiz_assignees
end

FactoryGirl.define do
  factory :quiz do
    title { Factory.next(:name) }
    description { Factory.next(:description) }
    quiz_type "Practice"

    factory :quizWassignments do
      ignore do
        count 3
      end
      after_create do |quiz, evaluator|
        FactoryGirl.build_list(:quiz_assignment, evaluator.count, quiz: quiz)
      end
    end
  end

  factory :quiz_assignment do
    due_at Time.now + 1.day
    published_at Time.now
  end
end

【问题讨论】:

    标签: rspec mongoid factory-bot


    【解决方案1】:

    当我第一次从 Active Record 切换到 Mongoid 时,我很难让 Factory Girl 玩得好。我最终切换到 Fabrication - 它支持开箱即用的 Mongoid。

    【讨论】:

    • theTRON 我将尝试 Fabrication 感谢您的提示。我似乎确实通过定义关联找到了解决方法,但无法像往常一样创建 has_many 。我必须做 factory :quizWassignments do quiz_assignments { [Factory.build(:quiz_assignment)] } end 但是在查看了 Fabrication 的文档之后,我已经在安装它并准备试用了!看起来棒极了。
    • Mannnnn !!!... 使用 Fabricator 轻松多了。我现在唯一喜欢 FG 的是在工厂中定义工厂,而不是使用 :from => 钩子。但仅此而已!让我向您展示我发现的用于创建 embedded_many 对象的代码的不同之处。 gist.github.com/2583902
    • @theTRON,我使用多态关联将电子邮件嵌入到个人对象中。我所做的与您的要点类似,但得到“BSON::InvalidDocument:无法将 Mongoid::Relations::Embedded::Many 类的对象序列化为 BSON。”。请参阅此处gist.github.com/3017471 获取代码。非常感谢任何帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多