Rails 3 Validation Question (Rspec) - PullRequest
0 голосов
/ 24 июня 2011

Полностью озадачен этим.Клянусь, похоже, это должно работать, но это не так.База данных тестирования была обновлена ​​(rake db: migrate - rake: db: test: clone).Я надеюсь, что делаю что-то глупое.

Полное раскрытие, я использую 3.1 RC4.

Модель

class ExerciseSet < ActiveRecord::Base

  TYPES = %w[time rep]

  validates :type,
            :presence => true,
            :inclusion => { :in => TYPES }

end

Спецификация

require 'spec_helper'

describe ExerciseSet do

  before(:each) do
    @attr = { :value => 12, 
              :value_max => 15,
              :type => "timed",
              :target => "range"
    }            
  end


  describe "type" do
    it "must be either 'time' or 'rep'" do
      values = %w[time rep]
      values.each do |value|
        exercise_instance = ExerciseSet.new(@attr.merge(:type  => value))
        exercise_instance.should be_valid
      end
    end
  end

end

Выход

Failures:

  1) ExerciseSet type must be either 'time' or 'rep'
     Failure/Error: exercise_instance.should be_valid
       expected valid? to return true, got false
     # ./spec/models/exercise_set_spec.rb:19:in `block (4 levels) in <top (required)>'
     # ./spec/models/exercise_set_spec.rb:17:in `each'
     # ./spec/models/exercise_set_spec.rb:17:in `block (3 levels) in <top (required)>'

1 Ответ

0 голосов
/ 24 июня 2011

Перво-наперво - почему экземпляр не действителен? Я бы добавил отладку к спецификации:

describe "type" do
  it "must be either 'time' or 'rep'" do
    values = %w[time rep]
    values.each do |value|
      exercise_instance = ExerciseSet.new(@attr.merge(:type  => value))
      exercise_instance.valid? # force errors
      puts exercise_instance.errors.full_messages.join("\n")
      exercise_instance.should be_valid
    end
  end
end

Да, это, вероятно, должен быть комментарий, но тогда я не мог бы так легко переписать спецификацию.

...