我正在对以下课程进行最简单的测试(在模型' 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>
答案 0 :(得分:1)
由于您的Offer
类不是从ActiveRecord::Base
继承的,因此您没有获得随附的任何内容(例如验证)。 valid?
是通过ActiveRecord的模块提供的方法,而不是直接由Ruby提供的,因此它不会在基本的Ruby类上提供。
如果您关心的只是验证,那么您可以在课程中加入ActiveModel::Validations
模块,它会为您提供valid?
以及validates_presence_of
等等:
class Offer
include ActiveModel::Validations
...
end
您还可以include ActiveModel
获取其他一些内容,例如ActiveRecord的命名和转化优势(以及验证)。