rubocop / rubocop-minitest

Code style checking for Minitest files.
https://docs.rubocop.org/rubocop-minitest
MIT License
144 stars 44 forks source link

Make the RuboCop::Minitest::Test suite re-usable by gem consumers #278

Open DougEdey opened 1 year ago

DougEdey commented 1 year ago

I've been writing custom cops for various jobs for a while now, but I've never had a consistent way to write tests for products that use minitest as the test suite (officially Rubocop only provides rspec helpers) , I started to look around to see what this Gem did and figured it would make sense to make rubocop-minitest provide a minitest class for others that write custom cops for their own code bases.

This does a couple of things

  1. Makes a new Rubocop::Minitest::Test class that includes the code from assert_offense (I don't feel like it needs to be a module), and it also uses declarative testing for people to use.
  2. I moved the "real" test suites in this gem to use the new base class, and kept the code blocks being tested as Minitest::Test
  3. I added declarative testing since all the test suites I've been in have it, where instead of using def test_something_does_something...end you can do test "something does something" do...end which makes it easier to read test names.

I tested this locally in an app of mine and it works great! So it can allow a consistent way for people to write custom cops and easily test them!


Before submitting the PR make sure the following are checked:

exterm commented 1 year ago

This makes a lot of sense to me and I'd love to use it.

Earlopain commented 11 months ago

If this is being exposed like this then I think it needs some documetation on how to pass global and cop specific config to a test.

See https://github.com/rubocop/rubocop-minitest/blob/b446022ea09b3f5558df9c0106c9e714c6fc1ec5/test/rubocop/cop/minitest/global_expectations_test.rb#L504-L513 and https://github.com/rubocop/rubocop-minitest/blob/b446022ea09b3f5558df9c0106c9e714c6fc1ec5/test/rubocop/cop/minitest/multiple_assertions_test.rb#L339-L343

DougEdey commented 11 months ago

@Earlopain Updated the casing of RuboCop, updated the sample docs (both inline and README.md), handling the nil case for @cop

DougEdey commented 11 months ago

Squashed commits and confirmed CI is passing locally

DougEdey commented 11 months ago

@koic 👋 Could I ask for a review?