FactoryGirl 禁用某些工厂的 linting
FactoryGirl disable linting for some factories
所以我的 rails_helper
中有这段代码
config.before(:suite) do
begin
FactoryGirl.lint
end
这让我很头疼。我有一个用户 class,它可以有多个附加配置文件,如下所示:
class User
has_one :student_profile, class_name: Student
has_one :employee_profile, class_name: Employee
end
现在的问题是,在用户注册期间,我需要根据正在注册的用户类型发送不同的电子邮件布局(我正在 class 验证他们的个人资料,并取决于 "stronger" 配置文件,我切换到适当的布局。
我已经覆盖了设计邮件程序以添加基于 main_profile 类型的布局
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
在我的注册过程中,我确保在保存 user/sending 确认之前至少建立了一种配置文件类型。
但似乎工厂女孩试图建立和拯救每一种类型的工厂,所以我得到了很多 user - Unknown layout for profile (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
这里我的 user
工厂是某种抽象工厂,永远不应该单独实例化(否则会导致上述错误)有什么办法可以解决这个问题?我正在考虑评论这一行 FactoryGirl.lint
否则 ?
如果你的工厂不需要持久化,你可以customize your factory's way to persist the object:
FactoryGirl.define do
factory :foo do
to_create { true } # no-op
# ...
这将允许 lint 步骤成功,但需要注意的是当您执行 FactoryGirl.create(:foo)
.
时它不再调用 save!
您不必 运行 lint
使用默认参数。要为某些禁用 linting - 可以预先过滤工厂:
FactoryGirl.lint(FactoryGirl.factories.reject{|f| f.name == :some_abstract_factory })
所以我的 rails_helper
中有这段代码config.before(:suite) do
begin
FactoryGirl.lint
end
这让我很头疼。我有一个用户 class,它可以有多个附加配置文件,如下所示:
class User
has_one :student_profile, class_name: Student
has_one :employee_profile, class_name: Employee
end
现在的问题是,在用户注册期间,我需要根据正在注册的用户类型发送不同的电子邮件布局(我正在 class 验证他们的个人资料,并取决于 "stronger" 配置文件,我切换到适当的布局。
我已经覆盖了设计邮件程序以添加基于 main_profile 类型的布局
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
在我的注册过程中,我确保在保存 user/sending 确认之前至少建立了一种配置文件类型。
但似乎工厂女孩试图建立和拯救每一种类型的工厂,所以我得到了很多 user - Unknown layout for profile (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
这里我的 user
工厂是某种抽象工厂,永远不应该单独实例化(否则会导致上述错误)有什么办法可以解决这个问题?我正在考虑评论这一行 FactoryGirl.lint
否则 ?
如果你的工厂不需要持久化,你可以customize your factory's way to persist the object:
FactoryGirl.define do
factory :foo do
to_create { true } # no-op
# ...
这将允许 lint 步骤成功,但需要注意的是当您执行 FactoryGirl.create(:foo)
.
save!
您不必 运行 lint
使用默认参数。要为某些禁用 linting - 可以预先过滤工厂:
FactoryGirl.lint(FactoryGirl.factories.reject{|f| f.name == :some_abstract_factory })