rspec / rspec-expectations

Provides a readable API to express expected outcomes of a code example
https://rspec.info
MIT License
1.26k stars 397 forks source link

Extract Countable to a reusable module #1252

Open pirj opened 3 years ago

pirj commented 3 years ago

I've seen a lot of custom matchers, and ours included, reimplement the same interface of #once, #twice, #at_least etc. Sometimes partially, sometimes completely.

A Countable module can be used in matchers from Expectations (include) and Mocks (receive), and third-party extensions.

Expected behavior

RSpec::Matchers.define :drink_tea do |expected|
  include RSpec::Matchers::Countable
end

it { is_expected.to drink_tea.twice }

The problem here is that Mocks do not depend on Expectations, and Support might not be the best place for it (can't find the discussion about extracting, can only recall the word "bag" was used).

JonRowe commented 3 years ago

I'm not sure we want to make it a public api though...

pirj commented 3 years ago

have_enqueued_mail is yet another example.

JonRowe commented 3 years ago

Mocks cannot depend on Expectations for such core functionality, if you do want to extract it, then it would need to go to support. The current implementation is not suitable for extraction as we would need a single concrete way for a 3rd party to define how countable works.