Могу ли я использовать заводскую девушку для непостоянных моделей
У меня есть следующий завод:
FactoryGirl.define do
factory :poem do
skip_create
title "Poem title"
intro_verse
trait_verse
message_verse
end
end
для следующего неактивного класса модели записи:
class Poem
attr_accessor :title, :intro_verse, :trait_verse, :message_verse
end
Могу ли я создать фабрику для такого класса?
Когда я запускаю следующий тест:
it "has a valid factory" do
expect(build(:poem)).to be_valid
end
Я получаю следующую ошибку:
Failure/Error: expect(build(:poem)).to be_valid
NoMethodError:
undefined method `valid?'
2 ответа
Решение
Ошибка в том, что у класса нет метода экземпляра valid?
, (Модели Active Record имеют это определение по умолчанию)
Вам нужно придумать логику для определения, является ли экземпляр Poem действительным или нет, и написать valid?
метод соответственно.
IIRC, синтаксис expect(something).to be_condition
просто вызывает метод condition?
на something
и терпит неудачу, если возвращает false.
Используйте модуль ActiveModel::Validations, чтобы добавить возможность проверки объектов класса, как в Active Record:
class Poem
include ActiveModel::Validations
validates :title, presence: true
attr_accessor :title, :intro_verse, :trait_verse, :message_verse
end
poem = Poem.new
poem.valid? #false
poem.title = "title"
poem.valid? #true