使用 Class 方法启动工厂女孩
Initiate a Factory Girl with a Class Method
有没有办法用 class 方法覆盖 FactoryGirl 的 :create
和 :build
方法?
例如,假设我有一个Key
class 并且想创建一个工厂并'生成' 一些用于我的测试..
models/key.rb
class Key
def self.generate!(attrs = {})
# do some stuff
create!(attrs.merge(encryption_key: key))
end
end
spec/factories/keys.rb
FactoryGirl.define do
factory :key do
primary false
end
end
而不是 FactoryGirl.create(:key)
- 我想按照 FactoryGirl.generate!(:key)
的方式做一些事情。我已经尝试使用 FactoryGirl 的 自定义方法 和 回调 但没有成功。
非常感谢任何帮助。
添加方法生成!你需要打电话给 FactoryGirl.register_strategy
FactoryGirl.register_strategy :generate! , Generate
添加class这样生成
class Generate
def association(runner)
runner.run
end
def result(evaluation)
evaluation.object.tap do |instance|
instance.encryption_key = 'xxxx' if instance.has_attribute?(:encryption_key)
evaluation.create(instance)
end
end
end
然后你可以定义
FactoryGirl.define do
factory :key do
primary false
end
end
并调用
FactoryGirl.generate!(:key)
有没有办法用 class 方法覆盖 FactoryGirl 的 :create
和 :build
方法?
例如,假设我有一个Key
class 并且想创建一个工厂并'生成' 一些用于我的测试..
models/key.rb
class Key
def self.generate!(attrs = {})
# do some stuff
create!(attrs.merge(encryption_key: key))
end
end
spec/factories/keys.rb
FactoryGirl.define do
factory :key do
primary false
end
end
而不是 FactoryGirl.create(:key)
- 我想按照 FactoryGirl.generate!(:key)
的方式做一些事情。我已经尝试使用 FactoryGirl 的 自定义方法 和 回调 但没有成功。
非常感谢任何帮助。
添加方法生成!你需要打电话给 FactoryGirl.register_strategy
FactoryGirl.register_strategy :generate! , Generate
添加class这样生成
class Generate
def association(runner)
runner.run
end
def result(evaluation)
evaluation.object.tap do |instance|
instance.encryption_key = 'xxxx' if instance.has_attribute?(:encryption_key)
evaluation.create(instance)
end
end
end
然后你可以定义
FactoryGirl.define do
factory :key do
primary false
end
end
并调用
FactoryGirl.generate!(:key)