未定义的方法`有效吗?'使用FactoryGirl进行测试

时间:2014-07-31 20:30:15

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

我正在对以下课程进行最简单的测试(在模型' s文件夹中):

class Offer
  attr_accessor :title, :payout, :thumbnail

  def initialize(title, payout, thumbnail)
    @title = title
    @payout = payout
    @thumbnail = thumbnail
  end
end

事情是没有'提供'数据库表。从此类创建的对象永远不会保存在数据库中。

然后我使用rspec执行测试:

describe Offer do

  it "has a valid factory" do
    expect(FactoryGirl.create(:offer)).to be_valid
  end
    ...
end

和FactoryGirl:

FactoryGirl.define do
  factory :offer do
    skip_create
    title { Faker::Name.name }
    payout { Faker::Number.number(2) }
    thumbnail { Faker::Internet.url }

    initialize_with { new(title, payout, thumbnail)}
  end
end

我收到以下错误:

> undefined method `valid?' for #<Offer:0x00000002b78958>

1 个答案:

答案 0 :(得分:1)

由于您的Offer类不是从ActiveRecord::Base继承的,因此您没有获得随附的任何内容(例如验证)。 valid?是通过ActiveRecord的模块提供的方法,而不是直接由Ruby提供的,因此它不会在基本的Ruby类上提供。

如果您关心的只是验证,那么您可以在课程中加入ActiveModel::Validations模块,它会为您提供valid?以及validates_presence_of等等:

class Offer
  include ActiveModel::Validations
  ...
end

您还可以include ActiveModel获取其他一些内容,例如ActiveRecord的命名和转化优势(以及验证)。