diff --git a/lib/active_model/serializable.rb b/lib/active_model/serializable.rb index 300869f5..46584039 100644 --- a/lib/active_model/serializable.rb +++ b/lib/active_model/serializable.rb @@ -2,7 +2,7 @@ require 'active_model/serializable/utils' module ActiveModel module Serializable - INSTRUMENTATION_KEY = "!serialize.active_model_serializers".freeze + INSTRUMENTATION_KEY = '!serialize.active_model_serializers'.freeze def self.included(base) base.extend Utils diff --git a/test/unit/active_model/serilizable_test.rb b/test/unit/active_model/serilizable_test.rb new file mode 100644 index 00000000..99060689 --- /dev/null +++ b/test/unit/active_model/serilizable_test.rb @@ -0,0 +1,50 @@ +require 'test_helper' + +module ActiveModel + class SerializableTest + class InstrumentationTest < Minitest::Test + def setup + @events = [] + + @subscriber = ActiveSupport::Notifications.subscribe('!serialize.active_model_serializers') do |name, start, finish, id, payload| + @events << { name: name, serializer: payload[:serializer] } + end + end + + def teardown + ActiveSupport::Notifications.unsubscribe(@subscriber) if defined?(@subscriber) + end + + def test_instruments_default_serializer + DefaultSerializer.new(1).as_json + + assert_equal [{ name: '!serialize.active_model_serializers', serializer: 'ActiveModel::DefaultSerializer' }], @events + end + + def test_instruments_serializer + profile = Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1') + serializer = ProfileSerializer.new(profile) + + serializer.as_json + + assert_equal [{ name: '!serialize.active_model_serializers', serializer: 'ProfileSerializer' }], @events + end + + def test_instruments_array_serializer + profiles = [ + Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1'), + Profile.new(name: 'Name 2', description: 'Description 2', comments: 'Comments 2') + ] + serializer = ArraySerializer.new(profiles) + + serializer.as_json + + assert_equal [ + { name: '!serialize.active_model_serializers', serializer: 'ProfileSerializer' }, + { name: '!serialize.active_model_serializers', serializer: 'ProfileSerializer' }, + { name: '!serialize.active_model_serializers', serializer: 'ActiveModel::ArraySerializer' } + ], @events + end + end + end +end