Могу ли я использовать заводскую девушку для непостоянных моделей

У меня есть следующий завод:

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
Другие вопросы по тегам