Ruby on rails FactoryGirl为一些工厂禁用了绒线

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 现在的问题是,在用户注册期间,我需要根

我在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
现在的问题是,在用户注册期间,我需要根据注册的用户类型发送不同的电子邮件布局(我对他们的配置文件进行分类,根据“更强”的配置文件,我切换到适当的布局)

我已经重写了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 })

我更喜欢跳过过梁并在每个型号规格的开头进行测试。否则,您可以通过阅读文档跳过某些型号。我更喜欢跳过过梁并在每个型号规格的开头进行测试。否则,您可以通过阅读文档跳过某些型号