Skip to content

Instantly share code, notes, and snippets.

@plukevdh
Last active August 29, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save plukevdh/7438f96ec0bd4dd65de8 to your computer and use it in GitHub Desktop.
Save plukevdh/7438f96ec0bd4dd65de8 to your computer and use it in GitHub Desktop.
Why do mocked objects not assume identity of the object type they're mocking?
$> rspec test_case.rb
F.
Failures:
1) a failing case expects success
Failure/Error: expect(production_code(response)).to eq 'success'
expected: "success"
got: "failure"
(compared using ==)
# ./test_case.rb:28:in `block (2 levels) in <top (required)>'
Finished in 0.00106 seconds (files took 0.35682 seconds to load)
2 examples, 1 failure
Failed examples:
rspec ./test_case.rb:26 # a failing case expects success
require 'rspec'
module MyRequest
Good = Class.new
Redirect = Class.new
Fail = Class.new
end
def production_code(response)
case response
when MyRequest::Good
'success'
when MyRequest::Redirect, # 301
'redirect'
else
'failure'
end
end
RSpec.configure do |config|
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
mocks.verify_doubled_constant_names = true
end
end
RSpec.describe "a failing case" do
it "expects success" do
response = instance_double('MyRequest::Good')
expect(production_code(response)).to eq 'success'
end
it 'expects failure' do
response = instance_double('MyRequest::Fail')
expect(production_code(response)).to eq 'failure'
end
end
@plukevdh
Copy link
Author

plukevdh commented Oct 1, 2014

Fixed typo, added requires.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment