0

我有一个属于课程、教师和学期的模型部分。

我有一个工厂女孩的定义,如下所示:

factory :section do
  course
  teacher
  semester
  sequence(:section_number) {|n| "n"}
  days_of_week ["M", "W", "F", ""]
  time_block "7:45-9:15"
end

我对任何相关模型或部分都没有唯一性验证。

我有 2 个 rspec 文件,我需要在其中创建一个部分。如果我在每个文件上单独运行 rspec,它们都会通过,但是如果我在整个目录上运行 rspec,每次都会失败,因为 section 为 nil。而且每次都失败的不是同一个文件......

     Failure/Error: section = FactoryGirl.create(:section)
     NoMethodError:
       undefined method `join' for nil:NilClass

即使我在 Rails 控制台中调用 Factory Girl,它也会正确创建第一部分,并且任何后续调用都会导致 nil 部分。

我不知道为什么会发生这种情况......我有很多其他工厂可以正常工作。

4

2 回答 2

0

您的后续selection工厂永远不会是独一无二的。您正在使用sequencefor section_number,但最终使用String“n”。

尝试替换
sequence(:section_number) {|n| "n"}
sequence(:section_number) {|n| n},看看它是否适合您。

于 2013-05-13T18:40:17.100 回答
0

正如我最初所怀疑的那样,问题不在于我的工厂。

我在 section.rb 上有一个 before_create 方法,它将数组转换为字符串。我改变了工作方式并解决了问题。

前:

class Section < ActiveRecord::Base
 serialize :days_of_week

 before_create :array_to_s


 belongs_to :course
 belongs_to :teacher
 belongs_to :semester
 has_many :student_section_enrollments
 has_many :students, :through => :student_section_enrollments


 WEEKDAYS = ["M", "TU", "W", "TH", "F"]

 TIME_BLOCKS = ["7:45-9:15", "9:30-11:00"]

 def set_next_section_number(semester)
   self.section_number = semester.sections.count + 1
 end

 def current_semester_sections
    @current_sections = Section.where("description LIKE ?", current_semester)
 end

 private

 def array_to_s
   self.days_of_week = self.days_of_week.reject!(&:empty?)
   self.days_of_week = self.days_of_week.join(', ')
 end

结尾

后:

class Section < ActiveRecord::Base
 serialize :days_of_week, Array
 before_save :remove_empty_days_of_week


 belongs_to :course
 belongs_to :teacher
 belongs_to :semester
 has_many :student_section_enrollments
 has_many :students, :through => :student_section_enrollments


 WEEKDAYS = ["M", "TU", "W", "TH", "F"]

 TIME_BLOCKS = ["7:45-9:15", "9:30-11:00"]

 def set_next_section_number(semester)
   self.section_number = semester.sections.count + 1
 end

 def current_semester_sections
    @current_sections = Section.where("description LIKE ?", current_semester)
 end

 def days_of_week_string
   days_of_week.join(', ')
 end

 private

 def remove_empty_days_of_week
   if self.days_of_week.present?
     self.days_of_week.reject!(&:empty?)
   end
 end
end
于 2013-05-14T20:58:13.070 回答