Cucumber: How to find unused step definitions

Cucumber has an output format that prints step definitions only. You can use this to find unused ones:

  1. Temporarily add require_relative 'env' to the top of the first file in features/support. --dry-run makes Cucumber skip loading env.rb.
  2. Open a really wide terminal window.
  3. bundle exec cucumber --dry-run --format stepdefs | grep -B1 'NOT MATCHED' --no-group-separator | grep features/step_definitions

This will print all unused step definitions from your project – however, the result will include false positives. Steps that are exclusively called from other steps will be in the list. Assure a step is not used before removing it.

If you remove the --dry-run flag, all tests will actually run and you can skip adding the require_relative line. It will take much longer, but provide more accurate results.

Dominik Schöler Over 5 years ago