如果我让工厂女孩为演示者做标准的linting,它会失败,抱怨save!
没有实现。
是否可以自定义演示者的linting,以便仅检查它是否可以成功构建演示者,但不能保存它?
演示
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>'
答案 0 :(得分:2)
您可以将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! }