rubocop-rspec icon indicating copy to clipboard operation
rubocop-rspec copied to clipboard

Cop idea: Move nested modules to separate specs

Open ydakuka opened this issue 1 year ago • 2 comments

Actual behavior

I have the following spec with a main class and nested class(-es).

# frozen_string_literal: true

require 'rails_helper'

RSpec.describe RewardReferrerJob do
  pending 'some tests'

  describe RewardReferrerJob::Request do
    pending 'some tests'
  end

  describe RewardReferrerJob::Config do
    pending 'some tests'
  end
end

Expected behavior

I would like to have several separate specs.

# frozen_string_literal: true

require 'rails_helper'

RSpec.describe RewardReferrerJob do
  pending 'some tests'
end
# frozen_string_literal: true

require 'rails_helper'

RSpec.describe RewardReferrerJob::Request do
  pending 'some tests'
end
# frozen_string_literal: true

require 'rails_helper'

RSpec.describe RewardReferrerJob::Config do
  pending 'some tests'
end

Rubocop

ydakuka@yauhenid:~/Work/project$ bin/rails_docker rubocop -V
1.55.1 (using Parser 3.2.2.3, rubocop-ast 1.29.0, running on ruby 2.7.8) [x86_64-linux]
  - rubocop-capybara 2.18.0
  - rubocop-factory_bot 2.23.1
  - rubocop-performance 1.18.0
  - rubocop-rails 2.20.2
  - rubocop-rake 0.6.0
  - rubocop-rspec 2.23.0
  - rubocop-thread_safety 0.5.1

ydakuka avatar Aug 09 '23 11:08 ydakuka

What if there’s just one? Should be some threshold for the suggestion to extract?

pirj avatar Aug 09 '23 11:08 pirj

There is the RSpec/FilePath cop.

According to this cop, if I have the spec that describes the RewardReferrerJob class (and spec file path is consistent and well-formed), it's ok.

RSpec.describe RewardReferrerJob do
  pending 'some tests'
end

However, the first code snippet contains several classes. So the job-related files should be separate files with their specs. But I don't know if there is a way to detect the job-related files in the directories.

ydakuka avatar Aug 09 '23 20:08 ydakuka