diff --git a/lib/rails/controller/testing.rb b/lib/rails/controller/testing.rb index 45a2b27..7b2d0fc 100644 --- a/lib/rails/controller/testing.rb +++ b/lib/rails/controller/testing.rb @@ -2,6 +2,7 @@ require 'rails/controller/testing/test_process' require 'rails/controller/testing/integration' require 'rails/controller/testing/template_assertions' +require 'rails/controller/testing/template_instrumentation' module Rails module Controller @@ -10,16 +11,19 @@ def self.install ActiveSupport.on_load(:action_controller_test_case) do include Rails::Controller::Testing::TestProcess include Rails::Controller::Testing::TemplateAssertions + ActionView::TemplateRenderer.prepend(InstrumentDetermineTemplate) end ActiveSupport.on_load(:action_dispatch_integration_test) do include Rails::Controller::Testing::TemplateAssertions include Rails::Controller::Testing::Integration include Rails::Controller::Testing::TestProcess + ActionView::TemplateRenderer.prepend(InstrumentDetermineTemplate) end ActiveSupport.on_load(:action_view_test_case) do include Rails::Controller::Testing::TemplateAssertions + ActionView::TemplateRenderer.prepend(InstrumentDetermineTemplate) end end end diff --git a/lib/rails/controller/testing/template_assertions.rb b/lib/rails/controller/testing/template_assertions.rb index ad5e8ad..dcf8b1f 100644 --- a/lib/rails/controller/testing/template_assertions.rb +++ b/lib/rails/controller/testing/template_assertions.rb @@ -30,6 +30,16 @@ def setup_subscriptions end end + @_subscribers << ActiveSupport::Notifications.subscribe("determine_template.rails_controller_testing") do |_name, _start, _finish, _id, payload| + if payload[:options][:file] + path = payload[:template_identifier] + if path + @_files[path] += 1 + @_files[path.split("/").last] += 1 + end + end + end + @_subscribers << ActiveSupport::Notifications.subscribe("!render_template.action_view") do |_name, _start, _finish, _id, payload| if virtual_path = payload[:virtual_path] partial = virtual_path =~ /^.*\/_[^\/]*$/ @@ -40,12 +50,6 @@ def setup_subscriptions end @_templates[virtual_path] += 1 - else - path = payload[:identifier] - if path - @_files[path] += 1 - @_files[path.split("/").last] += 1 - end end end end diff --git a/lib/rails/controller/testing/template_instrumentation.rb b/lib/rails/controller/testing/template_instrumentation.rb new file mode 100644 index 0000000..08cdc27 --- /dev/null +++ b/lib/rails/controller/testing/template_instrumentation.rb @@ -0,0 +1,16 @@ +module Rails + module Controller + module Testing + module InstrumentDetermineTemplate + def determine_template(options) + super.tap do |found| + if found + instrument_payload = { template_identifier: found.identifier, virtual_path: found.virtual_path, options: options } + ActiveSupport::Notifications.instrument("determine_template.rails_controller_testing", instrument_payload) + end + end + end + end + end + end +end \ No newline at end of file