Извините за смутное название вопроса, но я с трудом пытаюсь перевести то, что я спрашиваю, в одну строку ...
У меня есть пара простых моделей Rails (3.1), сгенерированных с помощью rails g scaffold
, которые я пытаюсь выполнить модульное тестирование. Они определены следующим образом:
class ModelA < ActiveRecord::Base
validates_presence_of :field1, :field2
validates_uniqueness_of :field1
end
class ModelB < ActiveRecord::Base
validates_presence_of :field1
validates_uniqueness_of :field1
end
У меня есть пара светильников для каждой модели, то есть:
model_a_no_field1:
field2: test
model_a_no_field2:
field1: test
model_a_ok:
field1: test
field2: test
и
model_b_no_field1:
model_b_ok:
field1: test
Мои модульные тесты проверяют эти проверки:
class ModelATest < ActiveSupport::TestCase
test "field1 should be present" do
assert !model_as(:model_a_no_field1).valid?
end
test "field2 should be present" do
assert !model_as(:model_a_no_field2).valid?
end
test "field1 should be unique" do
model_a = model_as(:model_a_ok)
model_a.save
assert !model_as(:model_a_ok).valid?
end
end
Все эти тесты пройдены правильно. Тем не менее, мои подобные юнит-тесты для ModelB
:
class ModelBTest < ActiveSupport::TestCase
test "field1 should be present" do
assert !model_bs(:model_b_no_field1).valid?
end
test "field1 should be unique" do
model_b = model_bs(:model_b_ok)
model_b.save
assert !model_bs(:model_b_ok).valid?
end
end
Ошибка второго теста (проверка уникальности).
Я почти уверен, что это связано с пустым устройством YAML для model_b_no_field1
, но я не уверен. Я могу заставить тест пройти, заменив тело метода теста на
test "field1 should be unique" do
model_b = model_bs(:model_b_ok)
model_b.save
model_b2 = ModelB.new
assert !model_b2.valid?
end
Это нормально, но я бы хотел понять, что здесь происходит.