module ActionController::SerializationAssertions
def assert_serializer(options = {}, message = nil)
assert_serializer nil
# assert that no serializer was rendered
assert_serializer %r{\APost.+\Z}
# assert that the rendered serializer starts with "Post"
assert_serializer :post_serializer
# assert that the "PostSerializer" serializer was rendered
assert_serializer PostSerializer
# assert that the instance of PostSerializer was rendered
assert_serializer "PostSerializer"
# assert that the "PostSerializer" serializer was rendered
Asserts that the request was rendered with the appropriate serializers.
def assert_serializer(options = {}, message = nil) # Force body to be read in case the template is being streamed. response.body rendered = @serializers msg = message || "expecting <#{options.inspect}> but rendering with <#{rendered.keys}>" matches_serializer = case options when lambda { |options| options.kind_of?(Class) && options < ActiveModel::Serializer } rendered.any? do |serializer, count| options.name == serializer end when Symbol options = options.to_s.camelize rendered.any? do |serializer, count| serializer == options end when String !options.empty? && rendered.any? do |serializer, count| serializer == options end when Regexp rendered.any? do |serializer, count| serializer.match(options) end when NilClass rendered.blank? else raise ArgumentError, "assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil" end assert matches_serializer, msg end
def process(*args)
def process(*args) @serializers = Hash.new(0) super end
def setup_serialization_subscriptions
def setup_serialization_subscriptions @serializers = Hash.new(0) ActiveSupport::Notifications.subscribe("!serialize.active_model_serializers") do |name, start, finish, id, payload| serializer = payload[:serializer] @serializers[serializer] += 1 end end
def teardown_serialization_subscriptions
def teardown_serialization_subscriptions ActiveSupport::Notifications.unsubscribe("!serialize.active_model_serializers") end