Estoy bastante seguro de que aquí me falta algo realmente básico.Probando una devolución de llamada before_save con Rspec y Factory Girl
Quiero probar si una devolución de llamada before_save
hace lo que se supone que debe hacer, no solo que se llame.
me escribió la siguiente prueba:
it 'should add lecture to question_type' do
@course = Factory :course,
:start_time => Time.now - 1.hour,
:end_time => Time.now
@question = Factory.create(:question,
:course_id => @course.id,
:created_at => Time.now - 10.minutes)
@question.question_type.should == 'lecture'
end
y tengo las siguientes fábricas para course
y question
:
Factory.define :course do |c|
c.dept_code {"HIST"}
c.course_code { Factory.next(:course_code) }
c.start_time { Time.now - 1.hour }
c.end_time { Time.now }
c.lecture_days { ["Monday", Time.now.strftime('%A'), "Friday"] }
end
Factory.define :question do |q|
q.content {"Why don't I understand this class!?"}
q.association :course
end
y yo escribimos la siguiente devolución de llamada en mi modelo Question
:
before_save :add_type_to_question
protected
def add_type_to_question
@course = Course.find(self.course_id)
now = Time.now
if (time_now > lecture_start_time && time_now < lecture_end_time) && @course.lecture_days.map{|d| d.to_i}.include?(Time.now.wday)
self.question_type = "lecture"
end
end
La prueba mantiene f diciendo que "get: nil" para question_type en lugar de 'lecture'
Como no vi nada obviamente mal con mi código de implementación, probé la devolución de llamada en mi entorno de desarrollo y realmente funcionó agregando 'lecture' a tipo de pregunta.
Esto me hace pensar que puede haber algún problema con mi prueba. ¿Que me estoy perdiendo aqui? ¿Factory.create
omite devoluciones de llamadas por defecto?
En lugar de before_save, intenta before_validation – cpuguy83