mirror of
https://github.com/thoughtbot/factory_bot.git
synced 2022-11-09 11:43:51 -05:00
ff0e6fb6c0
The twiddle-wakka specifying only major and minor (not tiny) versions will grab latest minor, which ended up being 3.2 for all versions of Rails supported. This ensures that when we report supporting Rails 3.0, 3.1, and 3.2, we actually test against those versions. It also backports ActiveSupport::Notifications.subscribed, which was added in 3.2. Closes #367
62 lines
1.8 KiB
Ruby
62 lines
1.8 KiB
Ruby
require "spec_helper"
|
|
|
|
unless ActiveSupport::Notifications.respond_to?(:subscribed)
|
|
module SubscribedBehavior
|
|
def subscribed(callback, *args, &block)
|
|
subscriber = subscribe(*args, &callback)
|
|
yield
|
|
ensure
|
|
unsubscribe(subscriber)
|
|
end
|
|
end
|
|
|
|
ActiveSupport::Notifications.extend SubscribedBehavior
|
|
end
|
|
|
|
describe "using ActiveSupport::Instrumentation to track factory interaction" do
|
|
before do
|
|
define_model("User", email: :string)
|
|
FactoryGirl.define do
|
|
factory :user do
|
|
email "john@example.com"
|
|
|
|
factory :slow_user do
|
|
after_build { Kernel.sleep(0.1) }
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
it "tracks proper time of creating the record" do
|
|
time_to_execute = 0
|
|
callback = ->(name, start, finish, id, payload) { time_to_execute = finish - start }
|
|
ActiveSupport::Notifications.subscribed(callback, "factory_girl.run_factory") do
|
|
FactoryGirl.build(:slow_user)
|
|
end
|
|
|
|
time_to_execute.should be_within(0.03).of(0.1)
|
|
end
|
|
|
|
it "builds the correct payload" do
|
|
tracked_invocations = {}
|
|
|
|
callback = ->(name, start, finish, id, payload) do
|
|
factory_name = payload[:name]
|
|
strategy_name = payload[:strategy]
|
|
tracked_invocations[factory_name] ||= {}
|
|
tracked_invocations[factory_name][strategy_name] ||= 0
|
|
tracked_invocations[factory_name][strategy_name] += 1
|
|
end
|
|
|
|
ActiveSupport::Notifications.subscribed(callback, "factory_girl.run_factory") do
|
|
FactoryGirl.build_list(:slow_user, 2)
|
|
FactoryGirl.build_list(:user, 5)
|
|
FactoryGirl.create_list(:user, 2)
|
|
FactoryGirl.attributes_for(:slow_user)
|
|
end
|
|
|
|
tracked_invocations[:slow_user].should == { build: 2, attributes_for: 1 }
|
|
tracked_invocations[:user].should == { build: 5, create: 2 }
|
|
end
|
|
end
|