class RuboCop::Cop::RSpec::PendingWithoutReason

Checks for pending or skipped examples without reason.

@example

# bad
pending 'does something' do
end

# bad
it 'does something', :pending do
end

# bad
it 'does something' do
  pending
end

# bad
xdescribe 'something' do
end

# bad
skip 'does something' do
end

# bad
it 'does something', :skip do
end

# bad
it 'does something' do
  skip
end

# bad
it 'does something'

# good
it 'does something' do
  pending 'reason'
end

# good
it 'does something' do
  skip 'reason'
end

# good
it 'does something', pending: 'reason' do
end

# good
it 'does something', skip: 'reason' do
end

Constants

MSG

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/rspec/pending_without_reason.rb, line 102
def on_send(node)
  on_pending_by_metadata(node)
  return unless (parent = parent_node(node))

  if spec_group?(parent) || block_node_example_group?(node)
    on_skipped_by_example_method(node)
    on_skipped_by_example_group_method(node)
  elsif example?(parent)
    on_skipped_by_in_example_method(node)
  end
end

Private Instance Methods

block_node_example_group?(node) click to toggle source
# File lib/rubocop/cop/rspec/pending_without_reason.rb, line 123
def block_node_example_group?(node)
  node.block_node &&
    example_group?(node.block_node) &&
    explicit_rspec?(node.receiver)
end
on_pending_by_metadata(node) click to toggle source
# File lib/rubocop/cop/rspec/pending_without_reason.rb, line 135
def on_pending_by_metadata(node)
  metadata_without_reason?(node) do |pending|
    add_offense(node, message: "Give the reason for #{pending}.")
  end
end
on_skipped_by_example_group_method(node) click to toggle source
# File lib/rubocop/cop/rspec/pending_without_reason.rb, line 151
def on_skipped_by_example_group_method(node)
  skipped_by_example_group_method?(node) do
    add_offense(node, message: 'Give the reason for skip.')
  end
end
on_skipped_by_example_method(node) click to toggle source
# File lib/rubocop/cop/rspec/pending_without_reason.rb, line 141
def on_skipped_by_example_method(node)
  skipped_by_example_method?(node) do |pending|
    add_offense(node, message: "Give the reason for #{pending}.")
  end

  skipped_by_example_method_with_block?(node.parent) do |pending|
    add_offense(node, message: "Give the reason for #{pending}.")
  end
end
on_skipped_by_in_example_method(node) click to toggle source
# File lib/rubocop/cop/rspec/pending_without_reason.rb, line 129
def on_skipped_by_in_example_method(node)
  skipped_in_example?(node) do |pending|
    add_offense(node, message: "Give the reason for #{pending}.")
  end
end
parent_node(node) click to toggle source
# File lib/rubocop/cop/rspec/pending_without_reason.rb, line 116
def parent_node(node)
  node_or_block = node.block_node || node
  return unless (parent = node_or_block.parent)

  parent.begin_type? && parent.parent ? parent.parent : parent
end