mbi*_*ard 15 module ruby-on-rails mixins factory-bot
我正在尝试在我的所有工厂中重用一个辅助方法,但是我无法让它工作.这是我的设置:
module Tests
module Helpers
# not guaranteed to be unique, useful for generating passwords
def random_string(length = 20)
chars = ['A'..'Z', 'a'..'z', '0'..'9'].map{|r|r.to_a}.flatten
(0...length).map{ chars[rand(chars.size)] }.join
end
end
end
Run Code Online (Sandbox Code Playgroud)
FactoryGirl.define do
factory :user do
sequence(:username) { |n| "username-#{n}" }
password random_string
password_confirmation { |u| u.password }
end
end
Run Code Online (Sandbox Code Playgroud)
如果我运行我的测试(with rake spec),无论我在哪里创建用户,都会收到以下错误Factory(:user):
Failure/Error: Factory(:user)
ArgumentError:
Not registered: random_string
Run Code Online (Sandbox Code Playgroud)
为了能够random_string在我的工厂使用,我该怎么办?
我尝试过以下方法:
include Tests::Helpers我厂的每一级(前define,之间define以及factory :user和内部factory :user)spec_helper.rb,我已经有以下内容:config.include Tests::Helpers它让我可以访问random_string我的规格我还阅读了以下链接但没有成功:
apn*_*ing 11
仅仅是:
module Tests
module Helpers
# not guaranteed to be unique, useful for generating passwords
def self.random_string(length = 20)
chars = ['A'..'Z', 'a'..'z', '0'..'9'].map{|r|r.to_a}.flatten
(0...length).map{ chars[rand(chars.size)] }.join
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后:
FactoryGirl.define do
factory :user do
sequence(:username) { |n| "username-#{n}" }
password Tests::Helpers.random_string
password_confirmation { |u| u.password }
end
end
Run Code Online (Sandbox Code Playgroud)
好的,明白了:)做如下:
module FactoryGirl
class DefinitionProxy
def random_string
#your code here
end
end
end
Run Code Online (Sandbox Code Playgroud)
小智 6
apneadiving的答案对我不起作用.我必须做以下事情:
# /spec/support/factory_helpers.rb
module FactoryHelpers
def my_helper_method
# ...
end
end
FactoryGirl::Proxy.send(:include, FactoryHelpers)
Run Code Online (Sandbox Code Playgroud)
然后你可以使用它如下:
FactoryGirl.define do
factory :post do
title { my_helper_method }
end
end
Run Code Online (Sandbox Code Playgroud)