From 2edd39d2c22aec72bbd100ca3d6b64a33f8bd57f Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Fri, 1 Apr 2016 10:50:58 -0500 Subject: [PATCH] Need to teardown the dynamically added method --- .../serialization_scope_name_test.rb | 50 +++++++++++-------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/test/action_controller/serialization_scope_name_test.rb b/test/action_controller/serialization_scope_name_test.rb index ca1ff22fa..1ef980583 100644 --- a/test/action_controller/serialization_scope_name_test.rb +++ b/test/action_controller/serialization_scope_name_test.rb @@ -1,6 +1,17 @@ require 'test_helper' module SerializationScopeTesting + def self.undef_serializer_dynamic_scope_methods + [PostSerializer, PostViewContextSerializer]. each do |serializer_class| + instance_method_cache = serializer_class.instance_variable_get(:@_serializer_instance_methods) + class_method_cache = serializer_class.class_variable_get(:@@_serializer_instance_methods)[serializer_class] + [:view_context, :current_user].each do |scope_method| + serializer_class.send(:undef_method, scope_method) if serializer_class.method_defined?(scope_method) + instance_method_cache && instance_method_cache.delete(scope_method) + class_method_cache && class_method_cache.delete(scope_method) + end + end + end class User < ActiveModelSerializers::Model attr_accessor :id, :name, :admin def admin? @@ -70,6 +81,10 @@ def comments class DefaultScopeTest < ActionController::TestCase tests PostTestController + teardown do + SerializationScopeTesting.undef_serializer_dynamic_scope_methods + end + def test_default_serialization_scope assert_equal :current_user, @controller._serialization_scope end @@ -120,6 +135,10 @@ def serializer end tests PostViewContextTestController + teardown do + SerializationScopeTesting.undef_serializer_dynamic_scope_methods + end + def test_defined_serialization_scope assert_equal :view_context, @controller._serialization_scope end @@ -187,6 +206,10 @@ def new_post end tests PostViewContextTestController + teardown do + SerializationScopeTesting.undef_serializer_dynamic_scope_methods + end + def test_nil_serialization_scope assert_nil @controller._serialization_scope end @@ -196,14 +219,8 @@ def test_nil_serialization_scope_object end def test_nil_scope - if Rails.version.start_with?('4.0') - exception_class = NoMethodError - exception_matcher = 'admin?' - else - exception_class = NameError - exception_matcher = /admin|current_user/ - end - exception = assert_raises(exception_class) do + exception_matcher = /current_user/ + exception = assert_raises(NameError) do get :render_post_with_no_scope end assert_match exception_matcher, exception.message @@ -225,18 +242,11 @@ def test_serialization_scope_is_and_nil_scope_passed_in_current_user end def test_serialization_scope_is_nil_and_scope_passed_in_current_user_without_scope_name - get :render_post_with_passed_in_scope_without_scope_name - expected_json = { - post: { - id: 4, - title: 'Title', - body: "The 'scope' is the 'current_user': true", - comments: [ - { id: 2, body: 'Scoped' } - ] - } - }.to_json - assert_equal expected_json, @response.body + exception_matcher = /current_user/ + exception = assert_raises(NameError) do + get :render_post_with_passed_in_scope_without_scope_name + end + assert_match exception_matcher, exception.message end end end