1
0
Fork 0
mirror of https://github.com/thoughtbot/factory_bot.git synced 2022-11-09 11:43:51 -05:00
thoughtbot--factory_bot/spec/acceptance/activesupport_instrumentation_spec.rb
Joshua Clayton ff0e6fb6c0 Fix Appraisal dependencies and get suite green
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
2012-05-03 00:36:58 -04:00

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