为演示者自定义工厂女孩 linting
Customise factory-girl linting for presenters
如果我让 factory-girl 为演示者执行标准检查,它会失败,并抱怨 save!
没有实现。
是否可以自定义 Presenter 的 linting,使其仅检查是否可以成功构建 Presenter,而不保存它?
主持人
class PostPresenter
def initialize(post)
@post = post
end
end
工厂
FactoryGirl.define do
factory :post_presenter do
post
initialize_with { new(post) }
end
end
回溯
/Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/linter.rb:14:in `lint!': The following factories are invalid: (FactoryGirl::InvalidFactoryError)
* post_presenter - undefined method `save!' for #<PostPresenter:0x007f8c0b67beb8> (NoMethodError)
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/linter.rb:4:in `lint!'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl.rb:59:in `lint'
from /Users/agrimm/rails/redacted/spec/support/factory_girl.rb:12:in `block (2 levels) in <top (required)>'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:378:in `instance_exec'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:378:in `instance_exec'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:357:in `run'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1660:in `block in run_hooks_with'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1660:in `each'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1660:in `run_hooks_with'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1626:in `with_suite_hooks'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:114:in `block in run_specs'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:77:in `report'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:113:in `run_specs'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:89:in `run'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:73:in `run'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:41:in `invoke'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/exe/rspec:4:in `<top (required)>'
from /Users/agrimm/.rbenv/versions/2.2.0/bin/rspec:23:in `load'
from /Users/agrimm/.rbenv/versions/2.2.0/bin/rspec:23:in `<main>'
您可以将 skip_create
添加到工厂以完全跳过 to_create
块(通常调用 #save!
)。
FactoryGirl.define do
factory :post_presenter do
skip_create
post
initialize_with { new(post) }
end
end
或者,您可以实施自定义 to_save
回调:
to_save { post.save! }
如果我让 factory-girl 为演示者执行标准检查,它会失败,并抱怨 save!
没有实现。
是否可以自定义 Presenter 的 linting,使其仅检查是否可以成功构建 Presenter,而不保存它?
主持人
class PostPresenter
def initialize(post)
@post = post
end
end
工厂
FactoryGirl.define do
factory :post_presenter do
post
initialize_with { new(post) }
end
end
回溯
/Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/linter.rb:14:in `lint!': The following factories are invalid: (FactoryGirl::InvalidFactoryError)
* post_presenter - undefined method `save!' for #<PostPresenter:0x007f8c0b67beb8> (NoMethodError)
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/linter.rb:4:in `lint!'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl.rb:59:in `lint'
from /Users/agrimm/rails/redacted/spec/support/factory_girl.rb:12:in `block (2 levels) in <top (required)>'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:378:in `instance_exec'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:378:in `instance_exec'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:357:in `run'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1660:in `block in run_hooks_with'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1660:in `each'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1660:in `run_hooks_with'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1626:in `with_suite_hooks'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:114:in `block in run_specs'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:77:in `report'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:113:in `run_specs'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:89:in `run'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:73:in `run'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:41:in `invoke'
from /Users/agrimm/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.3.2/exe/rspec:4:in `<top (required)>'
from /Users/agrimm/.rbenv/versions/2.2.0/bin/rspec:23:in `load'
from /Users/agrimm/.rbenv/versions/2.2.0/bin/rspec:23:in `<main>'
您可以将 skip_create
添加到工厂以完全跳过 to_create
块(通常调用 #save!
)。
FactoryGirl.define do
factory :post_presenter do
skip_create
post
initialize_with { new(post) }
end
end
或者,您可以实施自定义 to_save
回调:
to_save { post.save! }