Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. require 'rails_helper'
  2.  
  3. class TestUser
  4.  
  5. def speak
  6. :speak
  7. end
  8. end
  9.  
  10. class TestException < StandardError
  11. end
  12.  
  13. RSpec.describe 'Configure Response' do
  14. let(:user) { TestUser.new }
  15.  
  16. it 'returns nil by default' do
  17. allow(user).to receive(:speak)
  18.  
  19. expect(user.speak).to be_nil
  20. end
  21.  
  22. it 'returns specific value' do
  23. expected_message = 'speak'
  24. allow(user).to receive(:speak).and_return(expected_message)
  25.  
  26. expect(user.speak).to eq(expected_message)
  27. end
  28.  
  29. it 'returns different values for multiple calls' do
  30. expected_messages = ["message 1", "message 2", "message 3"]
  31. allow(user).to receive(:speak).and_return(*expected_messages)
  32.  
  33. expect(user.speak).to eq(expected_messages[0])
  34. expect(user.speak).to eq(expected_messages[1])
  35. expect(user.speak).to eq(expected_messages[2])
  36. end
  37.  
  38. context 'when raising errors' do
  39. it 'raises an Exception class' do
  40. expected_exception_klass = TestException
  41. allow(user).to receive(:speak).and_raise(TestException)
  42.  
  43. begin
  44. user.speak
  45. rescue => error
  46. expect(error).to be_a(expected_exception_klass)
  47. end
  48. end
  49.  
  50. it 'raises an error with message' do
  51. expected_error_message = 'test error message'
  52. allow(user).to receive(:speak).and_raise(expected_error_message)
  53.  
  54. begin
  55. user.speak
  56. rescue => error
  57. expect(error.message).to eq(expected_error_message)
  58. end
  59. end
  60.  
  61. it 'raises an Exception class with message' do
  62. expected_exception_klass = TestException
  63. expected_error_message = 'test error message'
  64. allow(user).to receive(:speak).and_raise(expected_exception_klass, expected_error_message)
  65.  
  66. begin
  67. user.speak
  68. rescue => error
  69. expect(error).to be_a(expected_exception_klass)
  70. expect(error.message).to eq(expected_error_message)
  71. end
  72. end
  73.  
  74. it 'raises an instance of an Exception class' do
  75. expected_exception_instance = TestException.new
  76. allow(user).to receive(:speak).and_raise(expected_exception_instance)
  77.  
  78. begin
  79. user.speak
  80. rescue => error
  81. expect(error).to eq(expected_exception_instance)
  82. end
  83. end
  84. end
  85.  
  86. it 'throws a symbol with an argument' do
  87. expected_message = "yell"
  88. allow(user).to receive(:speak).and_throw(:yell, expected_message)
  89.  
  90. message = catch :yell do
  91. user.speak
  92. end
  93.  
  94. expect(message).to eq(expected_message)
  95. end
  96.  
  97. it 'yields an argument' do
  98. message1 = "hello"
  99. message2 = "world"
  100.  
  101. expected_message = [message1, message2].join(' ')
  102.  
  103. allow(user).to receive(:speak).and_yield(message1, message2)
  104.  
  105. message = user.speak do |msg1, msg2|
  106. [msg1, msg2].join(' ')
  107. end
  108.  
  109. expect(message).to eq(expected_message)
  110. end
  111.  
  112. context 'when partial doubles' do
  113. it 'calls original implementation' do
  114. expected_message = :speak
  115. allow(user).to receive(:speak).and_call_original
  116.  
  117. expect(user.speak).to eq(expected_message)
  118. end
  119.  
  120. it 'wraps original implementation' do
  121. expected_message = 'speak'
  122. allow(user).to receive(:speak).and_wrap_original do |mthd, args|
  123. result = mthd.call(*args)
  124.  
  125. result.to_s
  126. end
  127.  
  128. expect(user.speak).to eq(expected_message)
  129. end
  130. end
  131. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement