Máquina de estado, validaciones de modelos y RSpec

Aquí está mi definición de clase actual y especificaciones:

class Event < ActiveRecord::Base

  # ...

  state_machine :initial => :not_started do

    event :game_started do
      transition :not_started => :in_progress
    end

    event :game_ended do
      transition :in_progress => :final
    end

    event :game_postponed do
      transition [:not_started, :in_progress] => :postponed
    end

    state :not_started, :in_progress, :postponed do
      validate :end_time_before_final
    end
  end

  def end_time_before_final
    return if end_time.blank?
    errors.add :end_time, "must be nil until event is final" if end_time.present?
  end

end

describe Event do
  context 'not started, in progress or postponed' do
    describe '.end_time_before_final' do
      ['not_started', 'in_progress', 'postponed'].each do |state|
        it 'should not allow end_time to be present' do
          event = Event.new(state: state, end_time: Time.now.utc)
          event.valid?
          event.errors[:end_time].size.should == 1
          event.errors[:end_time].should == ['must be nil until event is final']
        end
      end
    end
  end
end

Cuando ejecuto la especificación, obtengo dos fallas y un éxito. No tengo ni idea de porqué. Para dos de los estados, elreturn if end_time.blank? declaración en elend_time_before_final El método se evalúa como verdadero cuando debería ser falso cada vez. 'pospuesto' es el único estado que parece pasar. ¿Alguna idea de lo que podría estar pasando aquí?

Respuestas a la pregunta(1)

Su respuesta a la pregunta