Ruby on rails FactoryGirl为一些工厂禁用了绒线
我在rails\u助手中有这段代码Ruby on rails FactoryGirl为一些工厂禁用了绒线,ruby-on-rails,factory-bot,rspec-rails,ruby-on-rails-5,Ruby On Rails,Factory Bot,Rspec Rails,Ruby On Rails 5,我在rails\u助手中有这段代码 config.before(:suite) do begin FactoryGirl.lint end 这让我头疼。我有一个用户类,它可以有几个附加的配置文件,如下所示: class User has_one :student_profile, class_name: Student has_one :employee_profile, class_name: Employee end 现在的问题是,在用户注册期间,我需要根
config.before(:suite) do
begin
FactoryGirl.lint
end
这让我头疼。我有一个用户类,它可以有几个附加的配置文件,如下所示:
class User
has_one :student_profile, class_name: Student
has_one :employee_profile, class_name: Employee
end
现在的问题是,在用户注册期间,我需要根据注册的用户类型发送不同的电子邮件布局(我对他们的配置文件进行分类,根据“更强”的配置文件,我切换到适当的布局)
我已经重写了designe-mailer,以添加基于主配置文件类型的布局
def layout_for_user(user)
case user.main_profile // user.employee_profile || user.student_profile || user
when Employee
'layouts/mailer/company'
when Student
'layouts/mailer/student'
else
fail ArgumentError, 'Unknown layout for profile'
end
end
在注册过程中,我确保在保存用户/发送确认之前至少构建一种配置文件类型
但是Factory Girl似乎试图构建和保存每一种类型的工厂,所以我得到了很多用户未知的配置文件布局(ArgumentError)
有没有办法告诉FactoryGirl.lint跳过一些工厂?例如,让用户没有任何配置文件是没有意义的,但是仍然会生成错误
# rspec/factories/user.eb
FactoryGirl.define do
factory :user do
...
trait(:student) do
after(:build) do |user, evaluator|
user.student_profile = build(:student_profile,
user: user)
end
end
factory :student_user, traits: [:student]
end
这里我的
用户
工厂是一种抽象工厂,永远不应该单独实例化(否则会导致上面解释的错误)。有什么方法可以解决这个问题吗?我想对这行FactoryGirl.lint
否则?如果你的工厂不需要持久化,你可以:
这将允许lint步骤成功,但需要注意的是,当您执行
FactoryGirl.create(:foo)
时,lint步骤不再调用save!
。如果您的工厂不需要持久化,您可以:
这将允许lint步骤成功,但需要注意的是,当您执行
FactoryGirl.create(:foo)
时,它不再调用save!
。您不必使用默认参数运行lint
。要禁用某些工厂的lint,可以事先筛选:
FactoryGirl.lint(FactoryGirl.factories.reject{|f| f.name == :some_abstract_factory })
您不必使用默认参数运行
lint
。要禁用某些工厂的lint,可以事先筛选工厂:
FactoryGirl.lint(FactoryGirl.factories.reject{|f| f.name == :some_abstract_factory })
我更喜欢跳过过梁并在每个型号规格的开头进行测试。否则,您可以通过阅读文档跳过某些型号。我更喜欢跳过过梁并在每个型号规格的开头进行测试。否则,您可以通过阅读文档跳过某些型号