Module: TestProf::FactoryDoctor
- Extended by:
- Logging
- Defined in:
- lib/test_prof/factory_doctor.rb,
lib/test_prof/factory_doctor/rspec.rb,
lib/test_prof/factory_doctor/factory_girl_patch.rb
Overview
FactoryDoctor is a tool that helps you identify tests that perform unnecessary database queries.
Defined Under Namespace
Modules: FactoryGirlPatch Classes: RSpecListener, Result
Constant Summary collapse
- IGNORED_QUERIES_PATTERN =
%r{( pg_table| pg_attribute| pg_namespace| show\stables| pragma| sqlite_master/rollback| \ATRUNCATE TABLE| \AALTER TABLE| \ABEGIN| \ACOMMIT| \AROLLBACK| \ARELEASE| \ASAVEPOINT )}xi
Constants included from Logging
Class Attribute Summary collapse
-
.count ⇒ Object
readonly
Returns the value of attribute count.
-
.event ⇒ Object
readonly
Returns the value of attribute event.
-
.queries_count ⇒ Object
readonly
Returns the value of attribute queries_count.
-
.time ⇒ Object
readonly
Returns the value of attribute time.
Class Method Summary collapse
-
.ignore ⇒ Object
Do not analyze code within the block.
-
.init(event = 'sql.active_record') ⇒ Object
Patch factory lib, init counters.
- .result ⇒ Object
- .start ⇒ Object
- .stop ⇒ Object
- .within_factory(strategy) ⇒ Object
Methods included from Logging
Class Attribute Details
.count ⇒ Object (readonly)
Returns the value of attribute count.
43 44 45 |
# File 'lib/test_prof/factory_doctor.rb', line 43 def count @count end |
.event ⇒ Object (readonly)
Returns the value of attribute event.
42 43 44 |
# File 'lib/test_prof/factory_doctor.rb', line 42 def event @event end |
.queries_count ⇒ Object (readonly)
Returns the value of attribute queries_count.
43 44 45 |
# File 'lib/test_prof/factory_doctor.rb', line 43 def queries_count @queries_count end |
.time ⇒ Object (readonly)
Returns the value of attribute time.
43 44 45 |
# File 'lib/test_prof/factory_doctor.rb', line 43 def time @time end |
Class Method Details
.ignore ⇒ Object
Do not analyze code within the block
73 74 75 76 77 78 79 |
# File 'lib/test_prof/factory_doctor.rb', line 73 def ignore @ignored = true res = yield ensure @ignored = false res end |
.init(event = 'sql.active_record') ⇒ Object
Patch factory lib, init counters
46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/test_prof/factory_doctor.rb', line 46 def init(event = 'sql.active_record') @event = event reset! log :info, "FactoryDoctor enabled" # Monkey-patch FactoryGirl ::FactoryGirl::FactoryRunner.prepend(FactoryGirlPatch) if defined?(::FactoryGirl) subscribe! end |
.result ⇒ Object
68 69 70 |
# File 'lib/test_prof/factory_doctor.rb', line 68 def result Result.new(count, time, queries_count) end |
.start ⇒ Object
59 60 61 62 |
# File 'lib/test_prof/factory_doctor.rb', line 59 def start reset! @running = true end |
.stop ⇒ Object
64 65 66 |
# File 'lib/test_prof/factory_doctor.rb', line 64 def stop @running = false end |
.within_factory(strategy) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/test_prof/factory_doctor.rb', line 81 def within_factory(strategy) return yield if ignore? || !running? || (strategy != :create) begin ts = Time.now if @depth.zero? @depth += 1 @count += 1 yield ensure @depth -= 1 @time += (Time.now - ts) if @depth.zero? end end |