0.0
The project is in a healthy, maintained state
Detects RSpec examples that execute no expectations or write unexpected stdout/stderr output.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Runtime

 Project Readme

rspec-risky

Ruby Gem Version

Runtime risky-test detection for RSpec.

rspec-risky reports examples that pass without executing any expectations, and examples that write unexpected output to $stdout or $stderr.

Installation

Add the gem to your Gemfile:

gem "rspec-risky"

Then require and configure it from your spec helper:

require "rspec/risky"

RSpec.configure do |config|
  RSpec::Risky.configure(config) do |risky|
    risky.rules = %i[unknown_test redundant_print]
    risky.unknown_test.severity = :risky
    risky.unknown_test.count_mocks = true
    risky.unknown_test.adapters << ->(_example) { 0 }
    risky.redundant_print.severity = :risky
    risky.redundant_print.capture = :both
    risky.redundant_print.allow_warn = false
    risky.redundant_print.strict = false
    risky.redundant_print.capture_loggers = false
  end
end

You can also require rspec/risky/autorun to install the default configuration.

Use the formatter when you want risky examples to appear as R in progress output:

bundle exec rspec --require rspec/risky/autorun --format RSpec::Risky::Formatter

To use --risky-exit-code, use the wrapper executable or preload the gem before RSpec parses options:

ruby -S rspec-risky --risky-exit-code 7 --format RSpec::Risky::Formatter
ruby -rrspec/risky/autorun -S rspec --risky-exit-code 7 --format RSpec::Risky::Formatter

Use RSpec::Risky::JsonFormatter to emit machine-readable verdicts:

bundle exec rspec --require rspec/risky/autorun --format RSpec::Risky::JsonFormatter

Use RSpec::Risky::JsonEventFormatter to emit newline-delimited verdict events:

bundle exec rspec --require rspec/risky/autorun --format RSpec::Risky::JsonEventFormatter

Intentional smoke tests can opt out per example:

it "boots", risky: { allow: [:unknown_test] } do
  App.boot!
end

Output that is explicitly asserted with RSpec's output matcher is not reported:

it { expect { task.run }.to output(/done/).to_stdout }

Custom expectation libraries can call RSpec::Risky.record_expectation when they run a check.

Minitest

Require the plugin from a Minitest suite:

require "minitest/autorun"
require "minitest/risky_plugin"

Use --risky-fail to fail the process for risky Minitest results. Use --risky-allow-warn to ignore Kernel#warn output.

Evaluation Tasks

The gem includes local evaluation helpers:

bundle exec rake risky:static[spec]
bundle exec rake risky:compare[static.json,dynamic.json]
bundle exec rake risky:label[dynamic.json]
bundle exec rake risky:precision[labels.json]
bundle exec rake risky:study[dynamic.json,mutation.json]

License

The gem is available as open source under the terms of the MIT License.