Я использую Rspec и заводскую девушку, чтобы установить свои тесты.У меня есть фабрика пользователей, а затем я тестирую с помощью rspec.
В модуле с именем GameEngine :: Formulas у меня есть виртуальный атрибут (фактически hp - это уже модель, здесь он переопределяется):
def hp
((self[:hp] * 5) * (self.level + 1)) if self.first_class == 'Fighter'
((self[:hp] * 4) * (self.level + 1)) if self.first_class == 'Ranger'
((self[:hp] * 2) * (self.level + 1)) if self.first_class == 'Magician'
end
Когда я удаляю этот виртуальный атрибут,тест работает нормально.Но если я оставлю это здесь, я получу это:
Failure/Error: let(:user) { Factory(:user) }
ActiveRecord::RecordInvalid:
Validation failed: Hp can't be blank
ФАБРИКА:
Factory.define :user do |f|
f.sequence(:username) { |n| "test#{n}" }
f.password "1234567890"
f.sequence(:email) { |n| "test#{n}@test.com" }
f.first_class 'Ranger'
f.hp 10000
f.strength 100
f.magic 100
f.dexterity 100
f.accuracy 10
f.armor 20
f.level 1
end
Почему это так?