Comments (5)
The public
method takes 0 or 1 args: http://ruby-doc.org/core/classes/Module.html#M000448, but the example you provided doesn't accept any args, and is therefore in violation of Ruby's API. If you change the example to accept var args, it works fine:
class MyClass def self.public(*); nil; end def foo; bar; end def bar; "bar"; end end describe MyClass do it "should do the right thing" do instance = MyClass.new instance.should_receive :bar instance.foo end end
from rspec-mocks.
David,
First, thank you for the prompt response.
You are right about public
, but my example is contrived for readability. The actual problem I ran into was in trying to test a Sinatra app.
From sinatra 1.2.0
# sinatra 1.2.0 lib/sinatra/base.rb
# lines 1267..1270
def metadef(message, &block)
(class << self; self; end).
send :define_method, message, &block
end
# lines 925..940 (edited for clarity)
def set(option, value=self, &block)
# ...
metadef(option, &value)
metadef("#{option}?") { !!__send__(option) }
metadef("#{option}=") { |val| metadef(option, &Proc.new{val}) }
self
end
# line 1357
set :public, Proc.new { root && File.join(root, 'public') }
Is your position that this is a bug in Sinatra and a WONTFIX for rspec-mocks?
from rspec-mocks.
@hjdivad - yes, that's my position. It doesn't make sense that RSpec (or any other library) should have to check whether core Ruby APIs are in place and functioning as advertised.
from rspec-mocks.
@dchelimsky Fair enough. Thanks again.
from rspec-mocks.
(Commenting here for those that Google the issue)
If you do modular sinatra apps this seems to be a workaround... Let me know if you see any big issues.
class << self
alias_method :sinatra_public, :public
end
(class << self; self; end).send :define_method, :public, ::Module.instance_method(:public)
from rspec-mocks.
Related Issues (20)
- Expecting kwargs does not work in Ruby 3.2. HOT 15
- and_wrap_original doesn't work with kwargs in Ruby 3.2 HOT 3
- array_excluding matcher? HOT 2
- Rails 7.1 breaks receive().with HOT 6
- Assertion that Array#reverse is not called always fails
- stub_const doesn't work with constant inside `class << self` block HOT 3
- update repository 'About' setting to use rspec.info docs url instead of Relish
- Mocking methods changes `Method#parameters`. HOT 1
- Keyword args not validated HOT 1
- RSpec 3.11 mistakes kwargs for hash, when `verify_partial_doubles` is set to true HOT 4
- stub_const does not restore Object.const_source_location after reset HOT 3
- doc: broken links (404) on rspec.info HOT 6
- hash_including deviates from a_hash_including HOT 1
- (Fixed in `3.13.0pre`) `ActiveSupport`'s `Object#with` core extension overrides `RSpec::Mocks::Matchers::Receive(Object)#with` HOT 1
- facing issue with rspec-mocks test cases HOT 1
- `stack level too deep` when stubbing :is_a? with allow_any_instance_of
- `stack level too deep` when stubbing :is_a? with allow_any_instance_of
- `stub_const` doesn't clear `Class#subclasses` HOT 15
- and_wrap_original failing in ruby 3.2
- Mutex cannot be mocked since 3.9.0 (Stack level too deep) HOT 10
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rspec-mocks.