- Add first-class support for Sorbet type checking #22
- Breaking change (you probably won't care about) - When an unknown object
is passed to
Mocktail.explain
, the returned object'sreference
will now be set to aNoExplanationData
instead of the thing that was passed. To access that unknown thing, you can callNoExplanationData#thing
, (i.e.Mocktail.explain(lol_not_a_mock).reference.thing
and get a reference back tolol_not_a_mock
.) - Breaking change (you probably won't care about) - If you fake a class with
module that overloads
nil?
oris_a?
you may get an infinite recursion if you override it. See this skipped test
- Don't class extend Struct.new
- As promised in 1.2.1, there were bugs. #19
- Adds support for faking methods that use options hashes that are called with and without curly braces #17 (This is a sweeping change and there will probably be bugs.)
- Introduce the Mocktail.calls() API #16
- Improve the robustness of how we call the original methods on doubles & replaced class methods on mocks internally by Mocktail to avoid behavior being altered by how users configure mock objects
- Fix cases where classes that redefine built-in methods could cause issues when Mocktail in turn called those methods internally #15
- Improve output for undefined singleton methods (#11 by @calebhearth)
- Feature: add support for passing methods to
Mocktail.explain()
- Fix 3.1 support by bypassing highlight_error for custom NoMethodError objects raised by Mocktail error_highlight#20
- First breaking change! 🎉
- Remove support for
Mocktail.explain(nil)
because fake nil values cannot be made falsey. Pretty big mistake - Add
Mocktail.explain_nils
which will return explanation objects of every call that didn't satisfy a stubbing since the last reset, including the call site where it happened and the backtrace to try to tease out which one you're looking for
- Require pathname, which I missed because
bundle exec
loads it. Wups!
- Fix concurrency #6
- Introduce Mocktail.explain(), which will return a message & reference object
for any of:
- A class that has been passed to Mocktail.replace()
- An instance created by Mocktail.of() or of_next()
- A nil value returned by an unsatisfied stubbing invocation
- Fix some minor printing issue with the improved NoMethodError released in 0.0.3
- Implement method_missing on all mocked instance methods to print out useful information, like the target type, the attempted call, an example method definition that would match the call (for paint-by-numbers-like TDD), and did_you_mean gem integration of similar method names in case it was just a miss
- Cleans artificially-generated argument errors of gem-internal backtraces
- Drop Ruby 2.7 support. Unbeknownst to me (since I developed mocktail using
ruby 3.0), the entire approach to using
define_method
with*args
and**kwargs
splats only further confuses the arg splitting behavior in Ruby 2.x. So in the event that someone calls a method with an ambiguous hash-as-last arg (either in a mock demonstration or call), it will be functionally impossible to either (a) validate the args against the parameters or (b) compare two calls as being a match for one another. These problems could be overcome (by usingeval
instead ofdefine_method
for mocked methods and by expanding the call-matching logic dramatically), but who's got the time. Upgrade to 3.0!
Initial release