Skip to content
This repository has been archived by the owner on May 17, 2023. It is now read-only.

Commit

Permalink
Merge pull request #18 from sharespost/reset_stubs_on_class_methods
Browse files Browse the repository at this point in the history
Reset stubs on class methods
  • Loading branch information
MDaubs committed Mar 14, 2013
2 parents 804e69c + e85f2f7 commit d3f2850
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 28 deletions.
27 changes: 15 additions & 12 deletions Gemfile.lock
@@ -1,25 +1,28 @@
GEM
remote: https://rubygems.org/
specs:
appraisal (0.4.1)
appraisal (0.5.1)
bundler
rake
diff-lcs (1.1.3)
git (1.2.5)
jeweler (1.6.4)
jeweler (1.8.4)
bundler (~> 1.0)
git (>= 1.2.5)
rake
rake (0.9.2)
rdoc (3.6.1)
rspec (2.8.0)
rspec-core (~> 2.8.0)
rspec-expectations (~> 2.8.0)
rspec-mocks (~> 2.8.0)
rspec-core (2.8.0)
rspec-expectations (2.8.0)
diff-lcs (~> 1.1.2)
rspec-mocks (2.8.0)
rdoc
json (1.7.7)
rake (10.0.3)
rdoc (3.12.1)
json (~> 1.4)
rspec (2.12.0)
rspec-core (~> 2.12.0)
rspec-expectations (~> 2.12.0)
rspec-mocks (~> 2.12.0)
rspec-core (2.12.2)
rspec-expectations (2.12.1)
diff-lcs (~> 1.1.3)
rspec-mocks (2.12.2)

PLATFORMS
ruby
Expand Down
27 changes: 11 additions & 16 deletions lib/rspec-spies.rb
@@ -1,22 +1,17 @@
require 'rspec/mocks/method_double'
RSpec::Mocks::MethodDouble.class_eval do
# override defining stubs to record the message was called.
# there's only one line difference from upstream rspec, but can't change it without fully overriding
def define_proxy_method
return if @method_is_proxied
require 'rspec/mocks/proxy'

object_singleton_class.class_eval <<-EOF, __FILE__, __LINE__ + 1
def #{@method_name}(*args, &block)
__mock_proxy.record_message_received :#{@method_name}, *args, &block
__mock_proxy.message_received :#{@method_name}, *args, &block
end
#{visibility_for_method}
EOF
@method_is_proxied = true
RSpec::Mocks::Proxy.class_eval do
alias_method :oldsp_message_received, :message_received
alias_method :oldsp_reset, :reset

def message_received(message, *args, &block)
record_message_received(message, *args, &block)
oldsp_message_received(message, *args, &block)
end

def visibility_for_method
"#{visibility} :#{method_name}"
def reset
@messages_received = []
oldsp_reset
end
end

Expand Down
16 changes: 16 additions & 0 deletions spec/rspec-spies_spec.rb
Expand Up @@ -79,5 +79,21 @@ module Matchers
end
end

describe 'clearing out received messages' do
class Foo; end

before do
Foo.stub(:party)
end

it 'base case' do
Foo.party
have_received(:party).matches?(Foo).should be_true
end

it 'does not match even if the class method has been called in another spec' do
have_received(:party).matches?(Foo).should be_false
end
end
end
end

0 comments on commit d3f2850

Please sign in to comment.