我可以将工厂女孩用于非持久性模型

时间:2014-07-01 12:56:53

标签: ruby-on-rails rspec factory-bot

我有以下工厂:

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 个答案:

答案 0 :(得分:4)

错误是因为该类没有实例方法valid?。 (Active Record模型默认定义)

您需要提出一些逻辑来确定Poem实例是否有效,并相应地编写valid?方法。

IIRC,语法expect(something).to be_condition只调用condition?上的方法something,如果返回false则失败。

答案 1 :(得分:2)

使用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