我的应用程序有一个Phone模型,其中一个字段是.guid,它设置为before_create :set_guid
(生成随机字符串并在创建模型时将其放入guid字段中)。
我的手机工厂看起来像:
require 'faker'
FactoryGirl.define do
factory :phone do |f|
f.phone { Faker::PhoneNumber.phone_number }
end
end
这个创建手机的简单测试无法通过我的模型验证,因为guid是空白的:
describe Phone do
it "has a valid factory" do
FactoryGirl.create(:phone).should be_valid
end
我当然可以在工厂定义中手动填充guid字段,但是工厂不能运行模型的正常验证和回调以确保它们正常工作?
显然,我错过了一些东西 - 使用FactoryGirl创建模型实例的正确方法是什么才能正确运用before_create使guid等生成回调?
答案 0 :(得分:2)
你有一部带有属性电话的手机型号?
除此之外,还有工厂女孩callbacks in their Getting Started。
factory :user do
callback(:after_stub, :before_create) { do_something }
after(:stub, :create) { do_something_else }
before(:create, :custom) { do_a_third_thing }
end
像before(:create)这样的东西可能适合你。
难道你不能在默认工厂中硬编码guid吗?我的意思是你只想测试它一次,看它是否有效,然后剩下的只是压载,因为你想要工作测试。