win*_*ons 6 ruby ruby-on-rails-3 factory-bot
我想在我的工厂中干掉后创建/构建钩子:
FactoryGirl.define do
factory :poll do
sequence :title do |n|
"MyPollTitle#{n}"
end
sequence :description do |n|
"MyPollDescription#{n}"
end
user
factory :poll_with_answers do
ignore do
answers_count 2
end
after(:build) do |poll, evaluator|
evaluator.answers_count.times do
poll.answers << build(:answer, poll: poll)
end
end
after(:create) do |poll, evaluator|
evaluator.answers_count.times do
poll.answers << create(:answer, poll: poll)
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,我似乎无法在FG中定义方法?想法如何干这个?
首先,after(:create)隐式调用after(:build),至少在最新版本的FactoryGirl中:
after(:build) - 在构建工厂后调用(通过FactoryGirl.build,FactoryGirl.create)
https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#callbacks
因此,在您的情况下,以下代码应该足够:
after(:build) do |poll, evaluator|
evaluator.answers_count.times do
poll.answers << build(:answer, poll: poll)
end
end
Run Code Online (Sandbox Code Playgroud)
但是,after(:build)当您使用build_stubbed()而不是触发时build(),这是我在遇到此线程时尝试做的事情.为了干掉这个代码,事实证明你可以使用该callback()方法为多个方法调用相同的块:
factory :user do
callback(:after_build, :after_stub) do |user|
do_something_with(user)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6280 次 |
| 最近记录: |