1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
require File.expand_path('../acceptance_test_helper', __FILE__)
class StubClassMethodDefinedOnSuperclassTest < Mocha::TestCase
include AcceptanceTest
def setup
setup_acceptance_test
end
def teardown
teardown_acceptance_test
end
# rubocop:disable Lint/DuplicateMethods
def test_should_stub_public_method_on_child_class_and_leave_it_unchanged_after_test
superklass = Class.new do
class << self
def my_class_method
:original_return_value
end
public :my_class_method
end
end
klass = Class.new(superklass)
assert_snapshot_unchanged(klass) do
test_result = run_as_test do
klass.stubs(:my_class_method).returns(:new_return_value)
assert_equal :new_return_value, klass.my_class_method
end
assert_passed(test_result)
end
assert_equal :original_return_value, klass.my_class_method
end
def test_should_stub_protected_method_on_child_class_and_leave_it_unchanged_after_test
superklass = Class.new do
class << self
def my_class_method
:original_return_value
end
protected :my_class_method
end
end
klass = Class.new(superklass)
assert_snapshot_unchanged(klass) do
test_result = run_as_test do
klass.stubs(:my_class_method).returns(:new_return_value)
assert_equal :new_return_value, klass.send(:my_class_method)
end
assert_passed(test_result)
end
assert_equal :original_return_value, klass.send(:my_class_method)
end
def test_should_stub_private_method_on_child_class_and_leave_it_unchanged_after_test
superklass = Class.new do
class << self
def my_class_method
:original_return_value
end
private :my_class_method
end
end
klass = Class.new(superklass)
assert_snapshot_unchanged(klass) do
test_result = run_as_test do
klass.stubs(:my_class_method).returns(:new_return_value)
assert_equal :new_return_value, klass.send(:my_class_method)
end
assert_passed(test_result)
end
assert_equal :original_return_value, klass.send(:my_class_method)
end
def test_should_stub_method_on_superclass_and_leave_it_unchanged_after_test
superklass = Class.new do
class << self
def my_class_method
:original_return_value
end
public :my_class_method
end
end
klass = Class.new(superklass)
assert_snapshot_unchanged(klass) do
test_result = run_as_test do
superklass.stubs(:my_class_method).returns(:new_return_value)
assert_equal :new_return_value, klass.my_class_method
end
assert_passed(test_result)
end
assert_equal :original_return_value, klass.my_class_method
end
def test_stub_on_earliest_receiver_should_take_priority
superklass = Class.new do
class << self
def my_class_method
:original_return_value
end
end
end
klass = Class.new(superklass)
test_result = run_as_test do
klass.stubs(:my_class_method).returns(:klass_return_value)
superklass.stubs(:my_class_method).returns(:superklass_return_value)
assert_equal :klass_return_value, klass.my_class_method
end
assert_passed(test_result)
end
def test_expect_method_on_superclass_even_if_preceded_by_test_expecting_method_on_subclass
superklass = Class.new do
def self.inspect
'superklass'
end
def self.my_class_method; end
end
klass = Class.new(superklass) do
def self.inspect
'klass'
end
def self.my_class_method; end
end
test_result = run_as_tests(
test_1: lambda {
klass.expects(:my_class_method)
klass.my_class_method
},
test_2: lambda {
superklass.expects(:my_class_method)
}
)
assert_failed(test_result)
assert_equal [
'not all expectations were satisfied',
'unsatisfied expectations:',
'- expected exactly once, invoked never: superklass.my_class_method(any_parameters)'
], test_result.failure_message_lines
end
# rubocop:enable Lint/DuplicateMethods
end
|