Comments (10)
@floehopper just in case
module ParameterMatchers
# @private
class PositionalOrKeywordHash < Base
def matches?(available_parameters)
parameter, is_last_parameter = extract_parameter(available_parameters)
# return false unless HasEntries.new(@value).matches?([parameter]) <---- commenting this line makes the tests pass
Possibly you need that for something else, but I'd love to get that fixed
from mocha.
sounds good, thx!
from mocha.
@josesei I've got some tidying up to do and some double-checking I haven't broken anything else, but I think the changes in the fix-regression-in-matching-hash-parameter
branch should fix your problem. If you get the chance, I'd really appreciate it if you could see if it does fix the problem.
from mocha.
Makes sense, thanks for the insights and all your work!
from mocha.
workaround is to use block matcher
from mocha.
@josesei Thanks for reporting this. I had independently come to the same conclusion as you as to where the problem lies. I've managed to write a couple of failing unit tests in #660 which reproduce the issue. That line of code is needed to handle nested matchers with keyword arguments (see test below), but clearly the implentation isn't quite right. My head is pretty scrambled right now, but I'll try to get it fixed as soon as I can.
mocha/test/unit/parameter_matchers/positional_or_keyword_hash_test.rb
Lines 38 to 41 in e62fa61
from mocha.
@josesei Quick question - were these tests working with earlier versions of Mocha (e.g. v2.2.0)?
Actually - ignore that!
from mocha.
yep, it does work now! appreciate the effort!
it worked for me for ruby 2.6 and rails 5, mocha version mocha (1.13.0)
I guess it has to do with the keyword params compat thingy, but I'm sure you have it
from mocha.
@josesei Thanks for testing. The problem was something I accidentally introduced in v2.3.0 (specifically f94e250) as a fix for #647 where a Hash
parameter passed into Expectation#with
was implicitly wrapped in a call to #has_entries
. The latter does not require an exact match - only the specified entries have to match. The fix is to ensure that all entries match and that there are no extra entries. I hope to release the fix later today.
from mocha.
This fix has been released in v2.4.3.
from mocha.
Related Issues (20)
- Document some of the history of Mocha
- Improve failure message
- sometimes method fails to be mocked HOT 8
- Sign releases
- Stubbed methods not cleaned up post spec completion HOT 1
- Consider using GitHub-flavoured markdown notes, warnings, etc in README
- Mocha and Rails 7.0+ and controller tests HOT 3
- Run CI build with `--enable-frozen-string-literal` Ruby command line option HOT 1
- Fix Circle CI builds for Ruby v2.0 or discontinue support
- undefined method `sequences' HOT 5
- Better error message if `Mockery.teardown` is called when `Mockery.setup` has not been called successfully
- Parameter matching fails on keyword arguments HOT 5
- Consider using Ruby v1.9 hash syntax in `Hash#mocha_inspect`
- A "targeted" version of #any_instance HOT 5
- Since #648 `has_entry` no longer matches by exact value HOT 3
- Rename variables & parameters in matchers to use `actual`& `expected`
- Regression after upgrading to `2.4.3` HOT 14
- Expectations with extra arguments are now "unexpected invocations" HOT 6
- Optional hash parameters are now required in `.expects.with` HOT 1
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 mocha.