class RuboCop::Cop::RSpec::ExpectOutput
Checks for opportunities to use `expect { … }.to output`.
@example
# bad $stdout = StringIO.new my_app.print_report $stdout = STDOUT expect($stdout.string).to eq('Hello World') # good expect { my_app.print_report }.to output('Hello World').to_stdout
Constants
- MSG
Public Instance Methods
on_gvasgn(node)
click to toggle source
# File lib/rubocop/cop/rspec/expect_output.rb, line 21 def on_gvasgn(node) return unless inside_example_scope?(node) # rubocop:disable InternalAffairs/NodeDestructuring variable_name, _rhs = *node # rubocop:enable InternalAffairs/NodeDestructuring name = variable_name[1..-1] return unless name.eql?('stdout') || name.eql?('stderr') add_offense(node.loc.name, message: format(MSG, name: name)) end
Private Instance Methods
inside_example_scope?(node)
click to toggle source
Detect if we are inside the scope of a single example
We want to encourage using `expect { … }.to output` so we only care about situations where you would replace with an expectation. Therefore, assignments to stderr or stdout within a `before(:all)` or otherwise outside of an example don't matter.
# File lib/rubocop/cop/rspec/expect_output.rb, line 42 def inside_example_scope?(node) return false if node.nil? || example_group?(node) return true if example?(node) return RuboCop::RSpec::Hook.new(node).example? if hook?(node) inside_example_scope?(node.parent) end