diff --git a/.rubocop.yml b/.rubocop.yml
index 8c43f6909cf24aaba4f65e5593e02b03b4f067e5..e53af97a92cbde17ce059e32b9a88de66bdf4923 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -961,7 +961,7 @@ RSpec/DescribeSymbol:
 # Checks that the second argument to top level describe is the tested method
 # name.
 RSpec/DescribedClass:
-  Enabled: false
+  Enabled: true
 
 # Checks for long example.
 RSpec/ExampleLength:
diff --git a/doc/development/testing.md b/doc/development/testing.md
index 9b0b9808827ce1b84ddf2706c620916dfbd7dc59..6d8b846d27fe2d347bc8f7914182f08332fadf54 100644
--- a/doc/development/testing.md
+++ b/doc/development/testing.md
@@ -188,7 +188,8 @@ Please consult the [dedicated "Frontend testing" guide](./fe_guide/testing.md).
 ### General Guidelines
 
 - Use a single, top-level `describe ClassName` block.
-- Use `described_class` instead of repeating the class name being described.
+- Use `described_class` instead of repeating the class name being described
+  (_this is enforced by RuboCop_).
 - Use `.method` to describe class methods and `#method` to describe instance
   methods.
 - Use `context` to test branching logic.
@@ -197,7 +198,7 @@ Please consult the [dedicated "Frontend testing" guide](./fe_guide/testing.md).
 - Don't `describe` symbols (see [Gotchas](gotchas.md#dont-describe-symbols)).
 - Don't assert against the absolute value of a sequence-generated attribute (see [Gotchas](gotchas.md#dont-assert-against-the-absolute-value-of-a-sequence-generated-attribute)).
 - Don't supply the `:each` argument to hooks since it's the default.
-- Prefer `not_to` to `to_not` (_this is enforced by Rubocop_).
+- Prefer `not_to` to `to_not` (_this is enforced by RuboCop_).
 - Try to match the ordering of tests to the ordering within the class.
 - Try to follow the [Four-Phase Test][four-phase-test] pattern, using newlines
   to separate phases.
diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb
index 760f33b09c17692d0fcc93d463a0ee68b8c3a918..1bf0533ca24871f26efbc3e46ace7889bbe61f8e 100644
--- a/spec/controllers/application_controller_spec.rb
+++ b/spec/controllers/application_controller_spec.rb
@@ -4,7 +4,7 @@ describe ApplicationController do
   let(:user) { create(:user) }
 
   describe '#check_password_expiration' do
-    let(:controller) { ApplicationController.new }
+    let(:controller) { described_class.new }
 
     it 'redirects if the user is over their password expiry' do
       user.password_expires_at = Time.new(2002)
@@ -34,7 +34,7 @@ describe ApplicationController do
 
   describe "#authenticate_user_from_token!" do
     describe "authenticating a user from a private token" do
-      controller(ApplicationController) do
+      controller(described_class) do
         def index
           render text: "authenticated"
         end
@@ -66,7 +66,7 @@ describe ApplicationController do
     end
 
     describe "authenticating a user from a personal access token" do
-      controller(ApplicationController) do
+      controller(described_class) do
         def index
           render text: 'authenticated'
         end
@@ -115,7 +115,7 @@ describe ApplicationController do
   end
 
   context 'two-factor authentication' do
-    let(:controller) { ApplicationController.new }
+    let(:controller) { described_class.new }
 
     describe '#check_two_factor_requirement' do
       subject { controller.send :check_two_factor_requirement }
diff --git a/spec/finders/issues_finder_spec.rb b/spec/finders/issues_finder_spec.rb
index a1ae1d746afbd935131c3f3b98253bfcf34582bf..a5f717e62338981f1fddc3f92e6d2aca56ac6bd4 100644
--- a/spec/finders/issues_finder_spec.rb
+++ b/spec/finders/issues_finder_spec.rb
@@ -16,7 +16,7 @@ describe IssuesFinder do
     set(:label_link) { create(:label_link, label: label, target: issue2) }
     let(:search_user) { user }
     let(:params) { {} }
-    let(:issues) { IssuesFinder.new(search_user, params.reverse_merge(scope: scope, state: 'opened')).execute }
+    let(:issues) { described_class.new(search_user, params.reverse_merge(scope: scope, state: 'opened')).execute }
 
     before(:context) do
       project1.team << [user, :master]
@@ -282,15 +282,15 @@ describe IssuesFinder do
     let!(:confidential_issue) { create(:issue, project: project, confidential: true) }
 
     it 'returns non confidential issues for nil user' do
-      expect(IssuesFinder.send(:not_restricted_by_confidentiality, nil)).to include(public_issue)
+      expect(described_class.send(:not_restricted_by_confidentiality, nil)).to include(public_issue)
     end
 
     it 'returns non confidential issues for user not authorized for the issues projects' do
-      expect(IssuesFinder.send(:not_restricted_by_confidentiality, user)).to include(public_issue)
+      expect(described_class.send(:not_restricted_by_confidentiality, user)).to include(public_issue)
     end
 
     it 'returns all issues for user authorized for the issues projects' do
-      expect(IssuesFinder.send(:not_restricted_by_confidentiality, authorized_user)).to include(public_issue, confidential_issue)
+      expect(described_class.send(:not_restricted_by_confidentiality, authorized_user)).to include(public_issue, confidential_issue)
     end
   end
 end
diff --git a/spec/finders/merge_requests_finder_spec.rb b/spec/finders/merge_requests_finder_spec.rb
index 21ef94ac5d1873c7ddefab851b362f31bcd72534..58b7cd5e09840f376151b67664086528b5ad51a7 100644
--- a/spec/finders/merge_requests_finder_spec.rb
+++ b/spec/finders/merge_requests_finder_spec.rb
@@ -23,26 +23,26 @@ describe MergeRequestsFinder do
   describe "#execute" do
     it 'filters by scope' do
       params = { scope: 'authored', state: 'opened' }
-      merge_requests = MergeRequestsFinder.new(user, params).execute
+      merge_requests = described_class.new(user, params).execute
       expect(merge_requests.size).to eq(3)
     end
 
     it 'filters by project' do
       params = { project_id: project1.id, scope: 'authored', state: 'opened' }
-      merge_requests = MergeRequestsFinder.new(user, params).execute
+      merge_requests = described_class.new(user, params).execute
       expect(merge_requests.size).to eq(1)
     end
 
     it 'filters by non_archived' do
       params = { non_archived: true }
-      merge_requests = MergeRequestsFinder.new(user, params).execute
+      merge_requests = described_class.new(user, params).execute
       expect(merge_requests.size).to eq(3)
     end
 
     it 'filters by iid' do
       params = { project_id: project1.id, iids: merge_request1.iid }
 
-      merge_requests = MergeRequestsFinder.new(user, params).execute
+      merge_requests = described_class.new(user, params).execute
 
       expect(merge_requests).to contain_exactly(merge_request1)
     end
diff --git a/spec/finders/snippets_finder_spec.rb b/spec/finders/snippets_finder_spec.rb
index 975e99c58072713dec0ebd4a84a9cec9735dd831..cb6c80d1bd0ba4ab3484207f4ddd02ec697d2560 100644
--- a/spec/finders/snippets_finder_spec.rb
+++ b/spec/finders/snippets_finder_spec.rb
@@ -14,13 +14,13 @@ describe SnippetsFinder do
     let!(:snippet3) { create(:personal_snippet, :public) }
 
     it "returns all private and internal snippets" do
-      snippets = SnippetsFinder.new.execute(user, filter: :all)
+      snippets = described_class.new.execute(user, filter: :all)
       expect(snippets).to include(snippet2, snippet3)
       expect(snippets).not_to include(snippet1)
     end
 
     it "returns all public snippets" do
-      snippets = SnippetsFinder.new.execute(nil, filter: :all)
+      snippets = described_class.new.execute(nil, filter: :all)
       expect(snippets).to include(snippet3)
       expect(snippets).not_to include(snippet1, snippet2)
     end
@@ -32,7 +32,7 @@ describe SnippetsFinder do
     let!(:snippet3) { create(:personal_snippet, :public) }
 
     it "returns public public snippets" do
-      snippets = SnippetsFinder.new.execute(nil, filter: :public)
+      snippets = described_class.new.execute(nil, filter: :public)
 
       expect(snippets).to include(snippet3)
       expect(snippets).not_to include(snippet1, snippet2)
@@ -45,36 +45,36 @@ describe SnippetsFinder do
     let!(:snippet3) { create(:personal_snippet, :public, author: user) }
 
     it "returns all public and internal snippets" do
-      snippets = SnippetsFinder.new.execute(user1, filter: :by_user, user: user)
+      snippets = described_class.new.execute(user1, filter: :by_user, user: user)
       expect(snippets).to include(snippet2, snippet3)
       expect(snippets).not_to include(snippet1)
     end
 
     it "returns internal snippets" do
-      snippets = SnippetsFinder.new.execute(user, filter: :by_user, user: user, scope: "are_internal")
+      snippets = described_class.new.execute(user, filter: :by_user, user: user, scope: "are_internal")
       expect(snippets).to include(snippet2)
       expect(snippets).not_to include(snippet1, snippet3)
     end
 
     it "returns private snippets" do
-      snippets = SnippetsFinder.new.execute(user, filter: :by_user, user: user, scope: "are_private")
+      snippets = described_class.new.execute(user, filter: :by_user, user: user, scope: "are_private")
       expect(snippets).to include(snippet1)
       expect(snippets).not_to include(snippet2, snippet3)
     end
 
     it "returns public snippets" do
-      snippets = SnippetsFinder.new.execute(user, filter: :by_user, user: user, scope: "are_public")
+      snippets = described_class.new.execute(user, filter: :by_user, user: user, scope: "are_public")
       expect(snippets).to include(snippet3)
       expect(snippets).not_to include(snippet1, snippet2)
     end
 
     it "returns all snippets" do
-      snippets = SnippetsFinder.new.execute(user, filter: :by_user, user: user)
+      snippets = described_class.new.execute(user, filter: :by_user, user: user)
       expect(snippets).to include(snippet1, snippet2, snippet3)
     end
 
     it "returns only public snippets if unauthenticated user" do
-      snippets = SnippetsFinder.new.execute(nil, filter: :by_user, user: user)
+      snippets = described_class.new.execute(nil, filter: :by_user, user: user)
       expect(snippets).to include(snippet3)
       expect(snippets).not_to include(snippet2, snippet1)
     end
@@ -88,43 +88,43 @@ describe SnippetsFinder do
     end
 
     it "returns public snippets for unauthorized user" do
-      snippets = SnippetsFinder.new.execute(nil, filter: :by_project, project: project1)
+      snippets = described_class.new.execute(nil, filter: :by_project, project: project1)
       expect(snippets).to include(@snippet3)
       expect(snippets).not_to include(@snippet1, @snippet2)
     end
 
     it "returns public and internal snippets for non project members" do
-      snippets = SnippetsFinder.new.execute(user, filter: :by_project, project: project1)
+      snippets = described_class.new.execute(user, filter: :by_project, project: project1)
       expect(snippets).to include(@snippet2, @snippet3)
       expect(snippets).not_to include(@snippet1)
     end
 
     it "returns public snippets for non project members" do
-      snippets = SnippetsFinder.new.execute(user, filter: :by_project, project: project1, scope: "are_public")
+      snippets = described_class.new.execute(user, filter: :by_project, project: project1, scope: "are_public")
       expect(snippets).to include(@snippet3)
       expect(snippets).not_to include(@snippet1, @snippet2)
     end
 
     it "returns internal snippets for non project members" do
-      snippets = SnippetsFinder.new.execute(user, filter: :by_project, project: project1, scope: "are_internal")
+      snippets = described_class.new.execute(user, filter: :by_project, project: project1, scope: "are_internal")
       expect(snippets).to include(@snippet2)
       expect(snippets).not_to include(@snippet1, @snippet3)
     end
 
     it "does not return private snippets for non project members" do
-      snippets = SnippetsFinder.new.execute(user, filter: :by_project, project: project1, scope: "are_private")
+      snippets = described_class.new.execute(user, filter: :by_project, project: project1, scope: "are_private")
       expect(snippets).not_to include(@snippet1, @snippet2, @snippet3)
     end
 
     it "returns all snippets for project members" do
       project1.team << [user, :developer]
-      snippets = SnippetsFinder.new.execute(user, filter: :by_project, project: project1)
+      snippets = described_class.new.execute(user, filter: :by_project, project: project1)
       expect(snippets).to include(@snippet1, @snippet2, @snippet3)
     end
 
     it "returns private snippets for project members" do
       project1.team << [user, :developer]
-      snippets = SnippetsFinder.new.execute(user, filter: :by_project, project: project1, scope: "are_private")
+      snippets = described_class.new.execute(user, filter: :by_project, project: project1, scope: "are_private")
       expect(snippets).to include(@snippet1)
     end
   end
diff --git a/spec/lib/banzai/renderer_spec.rb b/spec/lib/banzai/renderer_spec.rb
index e6f8d2a1fed62bbd0a337e07920e65a8fb9d127e..0e094405e331fe29b38e7abfb1fe4f361a0ee139 100644
--- a/spec/lib/banzai/renderer_spec.rb
+++ b/spec/lib/banzai/renderer_spec.rb
@@ -11,7 +11,7 @@ describe Banzai::Renderer do
   end
 
   describe '#render_field' do
-    let(:renderer) { Banzai::Renderer }
+    let(:renderer) { described_class }
     subject { renderer.render_field(object, :field) }
 
     context 'with a stale cache' do
diff --git a/spec/lib/gitlab/changes_list_spec.rb b/spec/lib/gitlab/changes_list_spec.rb
index 69d86144e321fb4a73eff64f1ab2cf456a32b669..464508fcd7394faacd80df12074c26ca4f9a7095 100644
--- a/spec/lib/gitlab/changes_list_spec.rb
+++ b/spec/lib/gitlab/changes_list_spec.rb
@@ -5,7 +5,7 @@ describe Gitlab::ChangesList do
   let(:invalid_changes) { 1 }
 
   context 'when changes is a valid string' do
-    let(:changes_list) { Gitlab::ChangesList.new(valid_changes_string) }
+    let(:changes_list) { described_class.new(valid_changes_string) }
 
     it 'splits elements by newline character' do
       expect(changes_list).to contain_exactly({
diff --git a/spec/lib/gitlab/ci/build/credentials/factory_spec.rb b/spec/lib/gitlab/ci/build/credentials/factory_spec.rb
index 10b4b7a882684e1a866ac6cbab4890bbb6bd8e57..d53db05e5e6ae1f273c0ae32851abfc1f3222d72 100644
--- a/spec/lib/gitlab/ci/build/credentials/factory_spec.rb
+++ b/spec/lib/gitlab/ci/build/credentials/factory_spec.rb
@@ -3,14 +3,14 @@ require 'spec_helper'
 describe Gitlab::Ci::Build::Credentials::Factory do
   let(:build) { create(:ci_build, name: 'spinach', stage: 'test', stage_idx: 0) }
 
-  subject { Gitlab::Ci::Build::Credentials::Factory.new(build).create! }
+  subject { described_class.new(build).create! }
 
   class TestProvider
     def initialize(build); end
   end
 
   before do
-    allow_any_instance_of(Gitlab::Ci::Build::Credentials::Factory).to receive(:providers).and_return([TestProvider])
+    allow_any_instance_of(described_class).to receive(:providers).and_return([TestProvider])
   end
 
   context 'when provider is valid' do
diff --git a/spec/lib/gitlab/ci/build/credentials/registry_spec.rb b/spec/lib/gitlab/ci/build/credentials/registry_spec.rb
index 84e44dd53e2ca81d13f7b290300330ae88265760..c6054138cde1b919ab8aabab582faa46d2f8e8e3 100644
--- a/spec/lib/gitlab/ci/build/credentials/registry_spec.rb
+++ b/spec/lib/gitlab/ci/build/credentials/registry_spec.rb
@@ -4,14 +4,14 @@ describe Gitlab::Ci::Build::Credentials::Registry do
   let(:build) { create(:ci_build, name: 'spinach', stage: 'test', stage_idx: 0) }
   let(:registry_url) { 'registry.example.com:5005' }
 
-  subject { Gitlab::Ci::Build::Credentials::Registry.new(build) }
+  subject { described_class.new(build) }
 
   before do
     stub_container_registry_config(host_port: registry_url)
   end
 
   it 'contains valid DockerRegistry credentials' do
-    expect(subject).to be_kind_of(Gitlab::Ci::Build::Credentials::Registry)
+    expect(subject).to be_kind_of(described_class)
 
     expect(subject.username).to eq 'gitlab-ci-token'
     expect(subject.password).to eq build.token
@@ -20,7 +20,7 @@ describe Gitlab::Ci::Build::Credentials::Registry do
   end
 
   describe '.valid?' do
-    subject { Gitlab::Ci::Build::Credentials::Registry.new(build).valid? }
+    subject { described_class.new(build).valid? }
 
     context 'when registry is enabled' do
       before do
diff --git a/spec/lib/gitlab/current_settings_spec.rb b/spec/lib/gitlab/current_settings_spec.rb
index b01c4805a3449a624875fafad045490b645a044f..c796c98ec9f08e60018eec1da2419dbe48a0214d 100644
--- a/spec/lib/gitlab/current_settings_spec.rb
+++ b/spec/lib/gitlab/current_settings_spec.rb
@@ -10,7 +10,7 @@ describe Gitlab::CurrentSettings do
   describe '#current_application_settings' do
     context 'with DB available' do
       before do
-        allow_any_instance_of(Gitlab::CurrentSettings).to receive(:connect_to_db?).and_return(true)
+        allow_any_instance_of(described_class).to receive(:connect_to_db?).and_return(true)
       end
 
       it 'attempts to use cached values first' do
@@ -36,7 +36,7 @@ describe Gitlab::CurrentSettings do
 
     context 'with DB unavailable' do
       before do
-        allow_any_instance_of(Gitlab::CurrentSettings).to receive(:connect_to_db?).and_return(false)
+        allow_any_instance_of(described_class).to receive(:connect_to_db?).and_return(false)
       end
 
       it 'returns an in-memory ApplicationSetting object' do
diff --git a/spec/lib/gitlab/cycle_analytics/base_event_fetcher_spec.rb b/spec/lib/gitlab/cycle_analytics/base_event_fetcher_spec.rb
index c455cd9b94259efe73b1fef98e72ad4176a52f01..d8757c601ab854864c165909ec88ff7a51209807 100644
--- a/spec/lib/gitlab/cycle_analytics/base_event_fetcher_spec.rb
+++ b/spec/lib/gitlab/cycle_analytics/base_event_fetcher_spec.rb
@@ -20,7 +20,7 @@ describe Gitlab::CycleAnalytics::BaseEventFetcher do
 
   before do
     allow_any_instance_of(Gitlab::ReferenceExtractor).to receive(:issues).and_return(Issue.all)
-    allow_any_instance_of(Gitlab::CycleAnalytics::BaseEventFetcher).to receive(:serialize) do |event|
+    allow_any_instance_of(described_class).to receive(:serialize) do |event|
       event
     end
 
diff --git a/spec/lib/gitlab/git/util_spec.rb b/spec/lib/gitlab/git/util_spec.rb
index bcca4d4c746f5d1fdad1e635ea6654afcb576898..69d3ca5539724a61d42ce694ae0f7d3416cfcf53 100644
--- a/spec/lib/gitlab/git/util_spec.rb
+++ b/spec/lib/gitlab/git/util_spec.rb
@@ -9,7 +9,7 @@ describe Gitlab::Git::Util do
       ["foo\n\n", 2],
     ].each do |string, line_count|
       it "counts #{line_count} lines in #{string.inspect}" do
-        expect(Gitlab::Git::Util.count_lines(string)).to eq(line_count)
+        expect(described_class.count_lines(string)).to eq(line_count)
       end
     end
   end
diff --git a/spec/lib/gitlab/gitaly_client/ref_spec.rb b/spec/lib/gitlab/gitaly_client/ref_spec.rb
index 5405eafd281c131b24918fb6e858ce0abbafb9e7..255f23e6270ea2e57a27d68506b2ba41a6e6cd3c 100644
--- a/spec/lib/gitlab/gitaly_client/ref_spec.rb
+++ b/spec/lib/gitlab/gitaly_client/ref_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Gitlab::GitalyClient::Ref do
   let(:project) { create(:empty_project) }
   let(:repo_path) { project.repository.path_to_repo }
-  let(:client) { Gitlab::GitalyClient::Ref.new(project.repository) }
+  let(:client) { described_class.new(project.repository) }
 
   before do
     allow(Gitlab.config.gitaly).to receive(:enabled).and_return(true)
diff --git a/spec/lib/gitlab/ldap/person_spec.rb b/spec/lib/gitlab/ldap/person_spec.rb
index 9a556cde5d56bc9872eb7f0637c38ce6735a97cc..087c4d8c92c5ee733618f476dd472dd68315668c 100644
--- a/spec/lib/gitlab/ldap/person_spec.rb
+++ b/spec/lib/gitlab/ldap/person_spec.rb
@@ -20,7 +20,7 @@ describe Gitlab::LDAP::Person do
     it 'uses the configured name attribute and handles values as an array' do
       name = 'John Doe'
       entry['cn'] = [name]
-      person = Gitlab::LDAP::Person.new(entry, 'ldapmain')
+      person = described_class.new(entry, 'ldapmain')
 
       expect(person.name).to eq(name)
     end
@@ -30,7 +30,7 @@ describe Gitlab::LDAP::Person do
     it 'returns the value of mail, if present' do
       mail = 'john@example.com'
       entry['mail'] = mail
-      person = Gitlab::LDAP::Person.new(entry, 'ldapmain')
+      person = described_class.new(entry, 'ldapmain')
 
       expect(person.email).to eq([mail])
     end
@@ -38,7 +38,7 @@ describe Gitlab::LDAP::Person do
     it 'returns the value of userPrincipalName, if mail and email are not present' do
       user_principal_name = 'john.doe@example.com'
       entry['userPrincipalName'] = user_principal_name
-      person = Gitlab::LDAP::Person.new(entry, 'ldapmain')
+      person = described_class.new(entry, 'ldapmain')
 
       expect(person.email).to eq([user_principal_name])
     end
diff --git a/spec/lib/gitlab/metrics_spec.rb b/spec/lib/gitlab/metrics_spec.rb
index ab6e311b1e80b4034febc97db91c69f4393a8bfd..208a8d028cd604c6bfe1bee390eb871ab1b1906a 100644
--- a/spec/lib/gitlab/metrics_spec.rb
+++ b/spec/lib/gitlab/metrics_spec.rb
@@ -20,7 +20,7 @@ describe Gitlab::Metrics do
 
       expect(pool).to receive(:with).and_yield(connection)
       expect(connection).to receive(:write_points).with(an_instance_of(Array))
-      expect(Gitlab::Metrics).to receive(:pool).and_return(pool)
+      expect(described_class).to receive(:pool).and_return(pool)
 
       described_class.submit_metrics([{ 'series' => 'kittens', 'tags' => {} }])
     end
@@ -64,7 +64,7 @@ describe Gitlab::Metrics do
   describe '.measure' do
     context 'without a transaction' do
       it 'returns the return value of the block' do
-        val = Gitlab::Metrics.measure(:foo) { 10 }
+        val = described_class.measure(:foo) { 10 }
 
         expect(val).to eq(10)
       end
@@ -74,7 +74,7 @@ describe Gitlab::Metrics do
       let(:transaction) { Gitlab::Metrics::Transaction.new }
 
       before do
-        allow(Gitlab::Metrics).to receive(:current_transaction).
+        allow(described_class).to receive(:current_transaction).
           and_return(transaction)
       end
 
@@ -88,11 +88,11 @@ describe Gitlab::Metrics do
         expect(transaction).to receive(:increment).
           with('foo_call_count', 1)
 
-        Gitlab::Metrics.measure(:foo) { 10 }
+        described_class.measure(:foo) { 10 }
       end
 
       it 'returns the return value of the block' do
-        val = Gitlab::Metrics.measure(:foo) { 10 }
+        val = described_class.measure(:foo) { 10 }
 
         expect(val).to eq(10)
       end
@@ -105,7 +105,7 @@ describe Gitlab::Metrics do
         expect_any_instance_of(Gitlab::Metrics::Transaction).
           not_to receive(:add_tag)
 
-        Gitlab::Metrics.tag_transaction(:foo, 'bar')
+        described_class.tag_transaction(:foo, 'bar')
       end
     end
 
@@ -113,13 +113,13 @@ describe Gitlab::Metrics do
       let(:transaction) { Gitlab::Metrics::Transaction.new }
 
       it 'adds the tag to the transaction' do
-        expect(Gitlab::Metrics).to receive(:current_transaction).
+        expect(described_class).to receive(:current_transaction).
           and_return(transaction)
 
         expect(transaction).to receive(:add_tag).
           with(:foo, 'bar')
 
-        Gitlab::Metrics.tag_transaction(:foo, 'bar')
+        described_class.tag_transaction(:foo, 'bar')
       end
     end
   end
@@ -130,7 +130,7 @@ describe Gitlab::Metrics do
         expect_any_instance_of(Gitlab::Metrics::Transaction).
           not_to receive(:action=)
 
-        Gitlab::Metrics.action = 'foo'
+        described_class.action = 'foo'
       end
     end
 
@@ -138,12 +138,12 @@ describe Gitlab::Metrics do
       it 'sets the action of a transaction' do
         trans = Gitlab::Metrics::Transaction.new
 
-        expect(Gitlab::Metrics).to receive(:current_transaction).
+        expect(described_class).to receive(:current_transaction).
           and_return(trans)
 
         expect(trans).to receive(:action=).with('foo')
 
-        Gitlab::Metrics.action = 'foo'
+        described_class.action = 'foo'
       end
     end
   end
@@ -160,7 +160,7 @@ describe Gitlab::Metrics do
         expect_any_instance_of(Gitlab::Metrics::Transaction).
           not_to receive(:add_event)
 
-        Gitlab::Metrics.add_event(:meow)
+        described_class.add_event(:meow)
       end
     end
 
@@ -170,10 +170,10 @@ describe Gitlab::Metrics do
 
         expect(transaction).to receive(:add_event).with(:meow)
 
-        expect(Gitlab::Metrics).to receive(:current_transaction).
+        expect(described_class).to receive(:current_transaction).
           and_return(transaction)
 
-        Gitlab::Metrics.add_event(:meow)
+        described_class.add_event(:meow)
       end
     end
   end
diff --git a/spec/lib/gitlab/sidekiq_throttler_spec.rb b/spec/lib/gitlab/sidekiq_throttler_spec.rb
index ff32e0e699decb9e85fa871b2add0596f3c91bbd..6374ac80207b08c878fde7eb616ae7a8b8f90f20 100644
--- a/spec/lib/gitlab/sidekiq_throttler_spec.rb
+++ b/spec/lib/gitlab/sidekiq_throttler_spec.rb
@@ -13,14 +13,14 @@ describe Gitlab::SidekiqThrottler do
 
   describe '#execute!' do
     it 'sets limits on the selected queues' do
-      Gitlab::SidekiqThrottler.execute!
+      described_class.execute!
 
       expect(Sidekiq::Queue['build'].limit).to eq 4
       expect(Sidekiq::Queue['project_cache'].limit).to eq 4
     end
 
     it 'does not set limits on other queues' do
-      Gitlab::SidekiqThrottler.execute!
+      described_class.execute!
 
       expect(Sidekiq::Queue['merge'].limit).to be_nil
     end
diff --git a/spec/lib/gitlab/slash_commands/dsl_spec.rb b/spec/lib/gitlab/slash_commands/dsl_spec.rb
index 26217a0e3b2c6d29ece057cc64e5b8166553eb4d..2763d950716276727976d1d3ea534b11ccaa9729 100644
--- a/spec/lib/gitlab/slash_commands/dsl_spec.rb
+++ b/spec/lib/gitlab/slash_commands/dsl_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Gitlab::SlashCommands::Dsl do
   before :all do
     DummyClass = Struct.new(:project) do
-      include Gitlab::SlashCommands::Dsl
+      include Gitlab::SlashCommands::Dsl # rubocop:disable RSpec/DescribedClass
 
       desc 'A command with no args'
       command :no_args, :none do
diff --git a/spec/lib/gitlab/template/gitignore_template_spec.rb b/spec/lib/gitlab/template/gitignore_template_spec.rb
index 9750a012e22dc877a07426187c3e11d417b2077e..97797f42aaab9a8b3f23036d7bf754ab43940871 100644
--- a/spec/lib/gitlab/template/gitignore_template_spec.rb
+++ b/spec/lib/gitlab/template/gitignore_template_spec.rb
@@ -24,7 +24,7 @@ describe Gitlab::Template::GitignoreTemplate do
     it 'returns the Gitignore object of a valid file' do
       ruby = subject.find('Ruby')
 
-      expect(ruby).to be_a Gitlab::Template::GitignoreTemplate
+      expect(ruby).to be_a described_class
       expect(ruby.name).to eq('Ruby')
     end
   end
diff --git a/spec/lib/gitlab/template/gitlab_ci_yml_template_spec.rb b/spec/lib/gitlab/template/gitlab_ci_yml_template_spec.rb
index e3b8321eda3907f61eeea3fdb25cfc5263cb40c7..6541326d1def4b20e264aa043640bf4d91d43abb 100644
--- a/spec/lib/gitlab/template/gitlab_ci_yml_template_spec.rb
+++ b/spec/lib/gitlab/template/gitlab_ci_yml_template_spec.rb
@@ -25,7 +25,7 @@ describe Gitlab::Template::GitlabCiYmlTemplate do
     it 'returns the GitlabCiYml object of a valid file' do
       ruby = subject.find('Ruby')
 
-      expect(ruby).to be_a Gitlab::Template::GitlabCiYmlTemplate
+      expect(ruby).to be_a described_class
       expect(ruby.name).to eq('Ruby')
     end
   end
diff --git a/spec/lib/gitlab/template/issue_template_spec.rb b/spec/lib/gitlab/template/issue_template_spec.rb
index 9213ced7b194d342c93c2bb949e9f1dcf23882fa..329d1d74970717d5310b4c689d8d4f1711c5029d 100644
--- a/spec/lib/gitlab/template/issue_template_spec.rb
+++ b/spec/lib/gitlab/template/issue_template_spec.rb
@@ -37,7 +37,7 @@ describe Gitlab::Template::IssueTemplate do
     it 'returns the issue object of a valid file' do
       ruby = subject.find('bug', project)
 
-      expect(ruby).to be_a Gitlab::Template::IssueTemplate
+      expect(ruby).to be_a described_class
       expect(ruby.name).to eq('bug')
     end
   end
diff --git a/spec/lib/gitlab/template/merge_request_template_spec.rb b/spec/lib/gitlab/template/merge_request_template_spec.rb
index 77dd3079e2254becb6d7fb6eafc6cd48b2e2af1d..2b0056d9bab9bbed3482d022a42a5dab01972232 100644
--- a/spec/lib/gitlab/template/merge_request_template_spec.rb
+++ b/spec/lib/gitlab/template/merge_request_template_spec.rb
@@ -37,7 +37,7 @@ describe Gitlab::Template::MergeRequestTemplate do
     it 'returns the merge request object of a valid file' do
       ruby = subject.find('bug', project)
 
-      expect(ruby).to be_a Gitlab::Template::MergeRequestTemplate
+      expect(ruby).to be_a described_class
       expect(ruby.name).to eq('bug')
     end
   end
diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb
index 7f21288cf888cff21f62b7428f5d4523d4607eef..bf1dfe7f4129704f320fe780a97651c43430426d 100644
--- a/spec/lib/gitlab/usage_data_spec.rb
+++ b/spec/lib/gitlab/usage_data_spec.rb
@@ -6,7 +6,7 @@ describe Gitlab::UsageData do
   let!(:board) { create(:board, project: project) }
 
   describe '#data' do
-    subject { Gitlab::UsageData.data }
+    subject { described_class.data }
 
     it "gathers usage data" do
       expect(subject.keys).to match_array(%i(
@@ -58,7 +58,7 @@ describe Gitlab::UsageData do
   end
 
   describe '#license_usage_data' do
-    subject { Gitlab::UsageData.license_usage_data }
+    subject { described_class.license_usage_data }
 
     it "gathers license data" do
       expect(subject[:uuid]).to eq(current_application_settings.uuid)
diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb
index e6f0a3b592010b2e5c83ef4258aed832f6458c9c..9f12e40d808e5b971542b09ccccf7fde30b05c53 100644
--- a/spec/mailers/notify_spec.rb
+++ b/spec/mailers/notify_spec.rb
@@ -40,7 +40,7 @@ describe Notify do
         let(:issue_with_description) { create(:issue, author: current_user, assignee: assignee, project: project, description: 'My awesome description') }
 
         describe 'that are new' do
-          subject { Notify.new_issue_email(issue.assignee_id, issue.id) }
+          subject { described_class.new_issue_email(issue.assignee_id, issue.id) }
 
           it_behaves_like 'an assignee email'
           it_behaves_like 'an email starting a new thread with reply-by-email enabled' do
@@ -69,7 +69,7 @@ describe Notify do
         end
 
         describe 'that are new with a description' do
-          subject { Notify.new_issue_email(issue_with_description.assignee_id, issue_with_description.id) }
+          subject { described_class.new_issue_email(issue_with_description.assignee_id, issue_with_description.id) }
 
           it_behaves_like 'it should show Gmail Actions View Issue link'
 
@@ -79,7 +79,7 @@ describe Notify do
         end
 
         describe 'that have been reassigned' do
-          subject { Notify.reassigned_issue_email(recipient.id, issue.id, previous_assignee.id, current_user.id) }
+          subject { described_class.reassigned_issue_email(recipient.id, issue.id, previous_assignee.id, current_user.id) }
 
           it_behaves_like 'a multiple recipients email'
           it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
@@ -105,7 +105,7 @@ describe Notify do
         end
 
         describe 'that have been relabeled' do
-          subject { Notify.relabeled_issue_email(recipient.id, issue.id, %w[foo bar baz], current_user.id) }
+          subject { described_class.relabeled_issue_email(recipient.id, issue.id, %w[foo bar baz], current_user.id) }
 
           it_behaves_like 'a multiple recipients email'
           it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
@@ -132,7 +132,7 @@ describe Notify do
 
         describe 'status changed' do
           let(:status) { 'closed' }
-          subject { Notify.issue_status_changed_email(recipient.id, issue.id, status, current_user.id) }
+          subject { described_class.issue_status_changed_email(recipient.id, issue.id, status, current_user.id) }
 
           it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
             let(:model) { issue }
@@ -158,7 +158,7 @@ describe Notify do
 
         describe 'moved to another project' do
           let(:new_issue) { create(:issue) }
-          subject { Notify.issue_moved_email(recipient, issue, new_issue, current_user) }
+          subject { described_class.issue_moved_email(recipient, issue, new_issue, current_user) }
 
           it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
             let(:model) { issue }
@@ -190,7 +190,7 @@ describe Notify do
         let(:merge_request_with_description) { create(:merge_request, author: current_user, assignee: assignee, source_project: project, target_project: project, description: 'My awesome description') }
 
         describe 'that are new' do
-          subject { Notify.new_merge_request_email(merge_request.assignee_id, merge_request.id) }
+          subject { described_class.new_merge_request_email(merge_request.assignee_id, merge_request.id) }
 
           it_behaves_like 'an assignee email'
           it_behaves_like 'an email starting a new thread with reply-by-email enabled' do
@@ -221,7 +221,7 @@ describe Notify do
         end
 
         describe 'that are new with a description' do
-          subject { Notify.new_merge_request_email(merge_request_with_description.assignee_id, merge_request_with_description.id) }
+          subject { described_class.new_merge_request_email(merge_request_with_description.assignee_id, merge_request_with_description.id) }
 
           it_behaves_like 'it should show Gmail Actions View Merge request link'
           it_behaves_like "an unsubscribeable thread"
@@ -232,7 +232,7 @@ describe Notify do
         end
 
         describe 'that are reassigned' do
-          subject { Notify.reassigned_merge_request_email(recipient.id, merge_request.id, previous_assignee.id, current_user.id) }
+          subject { described_class.reassigned_merge_request_email(recipient.id, merge_request.id, previous_assignee.id, current_user.id) }
 
           it_behaves_like 'a multiple recipients email'
           it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
@@ -258,7 +258,7 @@ describe Notify do
         end
 
         describe 'that have been relabeled' do
-          subject { Notify.relabeled_merge_request_email(recipient.id, merge_request.id, %w[foo bar baz], current_user.id) }
+          subject { described_class.relabeled_merge_request_email(recipient.id, merge_request.id, %w[foo bar baz], current_user.id) }
 
           it_behaves_like 'a multiple recipients email'
           it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
@@ -283,7 +283,7 @@ describe Notify do
 
         describe 'status changed' do
           let(:status) { 'reopened' }
-          subject { Notify.merge_request_status_email(recipient.id, merge_request.id, status, current_user.id) }
+          subject { described_class.merge_request_status_email(recipient.id, merge_request.id, status, current_user.id) }
 
           it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
             let(:model) { merge_request }
@@ -308,7 +308,7 @@ describe Notify do
         end
 
         describe 'that are merged' do
-          subject { Notify.merged_merge_request_email(recipient.id, merge_request.id, merge_author.id) }
+          subject { described_class.merged_merge_request_email(recipient.id, merge_request.id, merge_author.id) }
 
           it_behaves_like 'a multiple recipients email'
           it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
@@ -337,7 +337,7 @@ describe Notify do
     describe 'project was moved' do
       let(:project) { create(:empty_project) }
       let(:user) { create(:user) }
-      subject { Notify.project_was_moved_email(project.id, user.id, "gitlab/gitlab") }
+      subject { described_class.project_was_moved_email(project.id, user.id, "gitlab/gitlab") }
 
       it_behaves_like 'an email sent from GitLab'
       it_behaves_like 'it should not have Gmail Actions links'
@@ -363,7 +363,7 @@ describe Notify do
           project.request_access(user)
           project.requesters.find_by(user_id: user.id)
         end
-        subject { Notify.member_access_requested_email('project', project_member.id) }
+        subject { described_class.member_access_requested_email('project', project_member.id) }
 
         it_behaves_like 'an email sent from GitLab'
         it_behaves_like 'it should not have Gmail Actions links'
@@ -390,7 +390,7 @@ describe Notify do
           project.request_access(user)
           project.requesters.find_by(user_id: user.id)
         end
-        subject { Notify.member_access_requested_email('project', project_member.id) }
+        subject { described_class.member_access_requested_email('project', project_member.id) }
 
         it_behaves_like 'an email sent from GitLab'
         it_behaves_like 'it should not have Gmail Actions links'
@@ -416,7 +416,7 @@ describe Notify do
         project.request_access(user)
         project.requesters.find_by(user_id: user.id)
       end
-      subject { Notify.member_access_denied_email('project', project.id, user.id) }
+      subject { described_class.member_access_denied_email('project', project.id, user.id) }
 
       it_behaves_like 'an email sent from GitLab'
       it_behaves_like 'it should not have Gmail Actions links'
@@ -434,7 +434,7 @@ describe Notify do
       let(:project) { create(:empty_project, :public, :access_requestable, namespace: owner.namespace) }
       let(:user) { create(:user) }
       let(:project_member) { create(:project_member, project: project, user: user) }
-      subject { Notify.member_access_granted_email('project', project_member.id) }
+      subject { described_class.member_access_granted_email('project', project_member.id) }
 
       it_behaves_like 'an email sent from GitLab'
       it_behaves_like 'it should not have Gmail Actions links'
@@ -465,7 +465,7 @@ describe Notify do
       let(:master) { create(:user).tap { |u| project.team << [u, :master] } }
       let(:project_member) { invite_to_project(project, inviter: master) }
 
-      subject { Notify.member_invited_email('project', project_member.id, project_member.invite_token) }
+      subject { described_class.member_invited_email('project', project_member.id, project_member.invite_token) }
 
       it_behaves_like 'an email sent from GitLab'
       it_behaves_like 'it should not have Gmail Actions links'
@@ -490,7 +490,7 @@ describe Notify do
         invitee
       end
 
-      subject { Notify.member_invite_accepted_email('project', project_member.id) }
+      subject { described_class.member_invite_accepted_email('project', project_member.id) }
 
       it_behaves_like 'an email sent from GitLab'
       it_behaves_like 'it should not have Gmail Actions links'
@@ -514,7 +514,7 @@ describe Notify do
         invitee
       end
 
-      subject { Notify.member_invite_declined_email('project', project.id, project_member.invite_email, master.id) }
+      subject { described_class.member_invite_declined_email('project', project.id, project_member.invite_email, master.id) }
 
       it_behaves_like 'an email sent from GitLab'
       it_behaves_like 'it should not have Gmail Actions links'
@@ -574,7 +574,7 @@ describe Notify do
 
         before(:each) { allow(note).to receive(:noteable).and_return(commit) }
 
-        subject { Notify.note_commit_email(recipient.id, note.id) }
+        subject { described_class.note_commit_email(recipient.id, note.id) }
 
         it_behaves_like 'a note email'
         it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
@@ -596,7 +596,7 @@ describe Notify do
         let(:note_on_merge_request_path) { namespace_project_merge_request_path(project.namespace, project, merge_request, anchor: "note_#{note.id}") }
         before(:each) { allow(note).to receive(:noteable).and_return(merge_request) }
 
-        subject { Notify.note_merge_request_email(recipient.id, note.id) }
+        subject { described_class.note_merge_request_email(recipient.id, note.id) }
 
         it_behaves_like 'a note email'
         it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
@@ -618,7 +618,7 @@ describe Notify do
         let(:note_on_issue_path) { namespace_project_issue_path(project.namespace, project, issue, anchor: "note_#{note.id}") }
         before(:each) { allow(note).to receive(:noteable).and_return(issue) }
 
-        subject { Notify.note_issue_email(recipient.id, note.id) }
+        subject { described_class.note_issue_email(recipient.id, note.id) }
 
         it_behaves_like 'a note email'
         it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
@@ -680,7 +680,7 @@ describe Notify do
 
         before(:each) { allow(note).to receive(:noteable).and_return(commit) }
 
-        subject { Notify.note_commit_email(recipient.id, note.id) }
+        subject { described_class.note_commit_email(recipient.id, note.id) }
 
         it_behaves_like 'a discussion note email', :discussion_note_on_commit
         it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
@@ -704,7 +704,7 @@ describe Notify do
         let(:note_on_merge_request_path) { namespace_project_merge_request_path(project.namespace, project, merge_request, anchor: "note_#{note.id}") }
         before(:each) { allow(note).to receive(:noteable).and_return(merge_request) }
 
-        subject { Notify.note_merge_request_email(recipient.id, note.id) }
+        subject { described_class.note_merge_request_email(recipient.id, note.id) }
 
         it_behaves_like 'a discussion note email', :discussion_note_on_merge_request
         it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
@@ -728,7 +728,7 @@ describe Notify do
         let(:note_on_issue_path) { namespace_project_issue_path(project.namespace, project, issue, anchor: "note_#{note.id}") }
         before(:each) { allow(note).to receive(:noteable).and_return(issue) }
 
-        subject { Notify.note_issue_email(recipient.id, note.id) }
+        subject { described_class.note_issue_email(recipient.id, note.id) }
 
         it_behaves_like 'a discussion note email', :discussion_note_on_issue
         it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do
@@ -798,7 +798,7 @@ describe Notify do
         let(:commit) { project.commit }
         let(:note) { create(:diff_note_on_commit) }
 
-        subject { Notify.note_commit_email(recipient.id, note.id) }
+        subject { described_class.note_commit_email(recipient.id, note.id) }
 
         it_behaves_like 'an email for a note on a diff discussion', :diff_note_on_commit
         it_behaves_like 'it should show Gmail Actions View Commit link'
@@ -809,7 +809,7 @@ describe Notify do
         let(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
         let(:note) { create(:diff_note_on_merge_request) }
 
-        subject { Notify.note_merge_request_email(recipient.id, note.id) }
+        subject { described_class.note_merge_request_email(recipient.id, note.id) }
 
         it_behaves_like 'an email for a note on a diff discussion', :diff_note_on_merge_request
         it_behaves_like 'it should show Gmail Actions View Merge request link'
@@ -826,7 +826,7 @@ describe Notify do
         group.request_access(user)
         group.requesters.find_by(user_id: user.id)
       end
-      subject { Notify.member_access_requested_email('group', group_member.id) }
+      subject { described_class.member_access_requested_email('group', group_member.id) }
 
       it_behaves_like 'an email sent from GitLab'
       it_behaves_like 'it should not have Gmail Actions links'
@@ -847,7 +847,7 @@ describe Notify do
         group.request_access(user)
         group.requesters.find_by(user_id: user.id)
       end
-      subject { Notify.member_access_denied_email('group', group.id, user.id) }
+      subject { described_class.member_access_denied_email('group', group.id, user.id) }
 
       it_behaves_like 'an email sent from GitLab'
       it_behaves_like 'it should not have Gmail Actions links'
@@ -865,7 +865,7 @@ describe Notify do
       let(:user) { create(:user) }
       let(:group_member) { create(:group_member, group: group, user: user) }
 
-      subject { Notify.member_access_granted_email('group', group_member.id) }
+      subject { described_class.member_access_granted_email('group', group_member.id) }
 
       it_behaves_like 'an email sent from GitLab'
       it_behaves_like 'it should not have Gmail Actions links'
@@ -896,7 +896,7 @@ describe Notify do
       let(:owner) { create(:user).tap { |u| group.add_user(u, Gitlab::Access::OWNER) } }
       let(:group_member) { invite_to_group(group, inviter: owner) }
 
-      subject { Notify.member_invited_email('group', group_member.id, group_member.invite_token) }
+      subject { described_class.member_invited_email('group', group_member.id, group_member.invite_token) }
 
       it_behaves_like 'an email sent from GitLab'
       it_behaves_like 'it should not have Gmail Actions links'
@@ -921,7 +921,7 @@ describe Notify do
         invitee
       end
 
-      subject { Notify.member_invite_accepted_email('group', group_member.id) }
+      subject { described_class.member_invite_accepted_email('group', group_member.id) }
 
       it_behaves_like 'an email sent from GitLab'
       it_behaves_like 'it should not have Gmail Actions links'
@@ -945,7 +945,7 @@ describe Notify do
         invitee
       end
 
-      subject { Notify.member_invite_declined_email('group', group.id, group_member.invite_email, owner.id) }
+      subject { described_class.member_invite_declined_email('group', group.id, group_member.invite_email, owner.id) }
 
       it_behaves_like 'an email sent from GitLab'
       it_behaves_like 'it should not have Gmail Actions links'
@@ -994,7 +994,7 @@ describe Notify do
     let(:user) { create(:user) }
     let(:tree_path) { namespace_project_tree_path(project.namespace, project, "empty-branch") }
 
-    subject { Notify.repository_push_email(project.id, author_id: user.id, ref: 'refs/heads/empty-branch', action: :create) }
+    subject { described_class.repository_push_email(project.id, author_id: user.id, ref: 'refs/heads/empty-branch', action: :create) }
 
     it_behaves_like 'it should not have Gmail Actions links'
     it_behaves_like 'a user cannot unsubscribe through footer link'
@@ -1020,7 +1020,7 @@ describe Notify do
     let(:user) { create(:user) }
     let(:tree_path) { namespace_project_tree_path(project.namespace, project, "v1.0") }
 
-    subject { Notify.repository_push_email(project.id, author_id: user.id, ref: 'refs/tags/v1.0', action: :create) }
+    subject { described_class.repository_push_email(project.id, author_id: user.id, ref: 'refs/tags/v1.0', action: :create) }
 
     it_behaves_like 'it should not have Gmail Actions links'
     it_behaves_like "a user cannot unsubscribe through footer link"
@@ -1045,7 +1045,7 @@ describe Notify do
     let(:example_site_path) { root_path }
     let(:user) { create(:user) }
 
-    subject { Notify.repository_push_email(project.id, author_id: user.id, ref: 'refs/heads/master', action: :delete) }
+    subject { described_class.repository_push_email(project.id, author_id: user.id, ref: 'refs/heads/master', action: :delete) }
 
     it_behaves_like 'it should not have Gmail Actions links'
     it_behaves_like 'a user cannot unsubscribe through footer link'
@@ -1067,7 +1067,7 @@ describe Notify do
     let(:example_site_path) { root_path }
     let(:user) { create(:user) }
 
-    subject { Notify.repository_push_email(project.id, author_id: user.id, ref: 'refs/tags/v1.0', action: :delete) }
+    subject { described_class.repository_push_email(project.id, author_id: user.id, ref: 'refs/tags/v1.0', action: :delete) }
 
     it_behaves_like 'it should not have Gmail Actions links'
     it_behaves_like 'a user cannot unsubscribe through footer link'
@@ -1096,7 +1096,7 @@ describe Notify do
     let(:send_from_committer_email) { false }
     let(:diff_refs) { Gitlab::Diff::DiffRefs.new(base_sha: project.merge_base_commit(sample_image_commit.id, sample_commit.id).id, head_sha: sample_commit.id) }
 
-    subject { Notify.repository_push_email(project.id, author_id: user.id, ref: 'refs/heads/master', action: :push, compare: compare, reverse_compare: false, diff_refs: diff_refs, send_from_committer_email: send_from_committer_email) }
+    subject { described_class.repository_push_email(project.id, author_id: user.id, ref: 'refs/heads/master', action: :push, compare: compare, reverse_compare: false, diff_refs: diff_refs, send_from_committer_email: send_from_committer_email) }
 
     it_behaves_like 'it should not have Gmail Actions links'
     it_behaves_like 'a user cannot unsubscribe through footer link'
@@ -1189,7 +1189,7 @@ describe Notify do
     let(:diff_path) { namespace_project_commit_path(project.namespace, project, commits.first) }
     let(:diff_refs) { Gitlab::Diff::DiffRefs.new(base_sha: project.merge_base_commit(sample_image_commit.id, sample_commit.id).id, head_sha: sample_commit.id) }
 
-    subject { Notify.repository_push_email(project.id, author_id: user.id, ref: 'refs/heads/master', action: :push, compare: compare, diff_refs: diff_refs) }
+    subject { described_class.repository_push_email(project.id, author_id: user.id, ref: 'refs/heads/master', action: :push, compare: compare, diff_refs: diff_refs) }
 
     it_behaves_like 'it should show Gmail Actions View Commit link'
     it_behaves_like 'a user cannot unsubscribe through footer link'
@@ -1215,7 +1215,7 @@ describe Notify do
   describe 'HTML emails setting' do
     let(:project) { create(:empty_project) }
     let(:user) { create(:user) }
-    let(:multipart_mail) { Notify.project_was_moved_email(project.id, user.id, "gitlab/gitlab") }
+    let(:multipart_mail) { described_class.project_was_moved_email(project.id, user.id, "gitlab/gitlab") }
 
     context 'when disabled' do
       it 'only sends the text template' do
diff --git a/spec/requests/api/helpers/internal_helpers_spec.rb b/spec/requests/api/helpers/internal_helpers_spec.rb
index f5265ea60ff4aee2d4f167df49d093100360d665..db716b340f1c3ef48029d68a70e31e116770c2a9 100644
--- a/spec/requests/api/helpers/internal_helpers_spec.rb
+++ b/spec/requests/api/helpers/internal_helpers_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe ::API::Helpers::InternalHelpers do
-  include ::API::Helpers::InternalHelpers
+  include described_class
 
   describe '.clean_project_path' do
     project = 'namespace/project'
diff --git a/spec/requests/api/helpers_spec.rb b/spec/requests/api/helpers_spec.rb
index 06c8eb1d0b7fad9d283971461ed5b0d4985d9846..ed392acc607a08f5c8b5c0244224c3083edab19c 100644
--- a/spec/requests/api/helpers_spec.rb
+++ b/spec/requests/api/helpers_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe API::Helpers do
   include API::APIGuard::HelperMethods
-  include API::Helpers
+  include described_class
   include SentryHelper
 
   let(:user) { create(:user) }
diff --git a/spec/services/merge_requests/get_urls_service_spec.rb b/spec/services/merge_requests/get_urls_service_spec.rb
index 290e00ea1baa51838283870faef592aab6394ef6..4a7d8ab4c6cacee6d8385b14fab951d35fa7e889 100644
--- a/spec/services/merge_requests/get_urls_service_spec.rb
+++ b/spec/services/merge_requests/get_urls_service_spec.rb
@@ -2,7 +2,7 @@ require "spec_helper"
 
 describe MergeRequests::GetUrlsService do
   let(:project) { create(:project, :public, :repository) }
-  let(:service) { MergeRequests::GetUrlsService.new(project) }
+  let(:service) { described_class.new(project) }
   let(:source_branch) { "my_branch" }
   let(:new_merge_request_url) { "http://#{Gitlab.config.gitlab.host}/#{project.namespace.name}/#{project.path}/merge_requests/new?merge_request%5Bsource_branch%5D=#{source_branch}" }
   let(:show_merge_request_url) { "http://#{Gitlab.config.gitlab.host}/#{project.namespace.name}/#{project.path}/merge_requests/#{merge_request.iid}" }
@@ -89,7 +89,7 @@ describe MergeRequests::GetUrlsService do
       let!(:merge_request) { create(:merge_request, source_project: forked_project, target_project: project, source_branch: source_branch) }
       let(:changes) { existing_branch_changes }
       # Source project is now the forked one
-      let(:service) { MergeRequests::GetUrlsService.new(forked_project) }
+      let(:service) { described_class.new(forked_project) }
 
       before do
         allow(forked_project).to receive(:empty_repo?).and_return(false)
diff --git a/spec/services/merge_requests/merge_request_diff_cache_service_spec.rb b/spec/services/merge_requests/merge_request_diff_cache_service_spec.rb
index 35804d41b4605446de979e4e91459df3239493f0..935f4710851863018a370d7474c6e39e2c1a6701 100644
--- a/spec/services/merge_requests/merge_request_diff_cache_service_spec.rb
+++ b/spec/services/merge_requests/merge_request_diff_cache_service_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe MergeRequests::MergeRequestDiffCacheService do
-  let(:subject) { MergeRequests::MergeRequestDiffCacheService.new }
+  let(:subject) { described_class.new }
 
   describe '#execute' do
     it 'retrieves the diff files to cache the highlighted result' do
diff --git a/spec/services/merge_requests/resolve_service_spec.rb b/spec/services/merge_requests/resolve_service_spec.rb
index eaf7785e549e84a45feefc749d256a873910f2ec..3afd6b92900868746ee664bb0d68ddff92375aae 100644
--- a/spec/services/merge_requests/resolve_service_spec.rb
+++ b/spec/services/merge_requests/resolve_service_spec.rb
@@ -50,7 +50,7 @@ describe MergeRequests::ResolveService do
 
       context 'when the source and target project are the same' do
         before do
-          MergeRequests::ResolveService.new(project, user, params).execute(merge_request)
+          described_class.new(project, user, params).execute(merge_request)
         end
 
         it 'creates a commit with the message' do
@@ -75,7 +75,7 @@ describe MergeRequests::ResolveService do
         end
 
         before do
-          MergeRequests::ResolveService.new(fork_project, user, params).execute(merge_request_from_fork)
+          described_class.new(fork_project, user, params).execute(merge_request_from_fork)
         end
 
         it 'creates a commit with the message' do
@@ -115,7 +115,7 @@ describe MergeRequests::ResolveService do
       end
 
       before do
-        MergeRequests::ResolveService.new(project, user, params).execute(merge_request)
+        described_class.new(project, user, params).execute(merge_request)
       end
 
       it 'creates a commit with the message' do
@@ -154,7 +154,7 @@ describe MergeRequests::ResolveService do
         }
       end
 
-      let(:service) { MergeRequests::ResolveService.new(project, user, invalid_params) }
+      let(:service) { described_class.new(project, user, invalid_params) }
 
       it 'raises a MissingResolution error' do
         expect { service.execute(merge_request) }.
@@ -180,7 +180,7 @@ describe MergeRequests::ResolveService do
         }
       end
 
-      let(:service) { MergeRequests::ResolveService.new(project, user, invalid_params) }
+      let(:service) { described_class.new(project, user, invalid_params) }
 
       it 'raises a MissingResolution error' do
         expect { service.execute(merge_request) }.
@@ -202,7 +202,7 @@ describe MergeRequests::ResolveService do
         }
       end
 
-      let(:service) { MergeRequests::ResolveService.new(project, user, invalid_params) }
+      let(:service) { described_class.new(project, user, invalid_params) }
 
       it 'raises a MissingFiles error' do
         expect { service.execute(merge_request) }.
diff --git a/spec/services/projects/housekeeping_service_spec.rb b/spec/services/projects/housekeeping_service_spec.rb
index eaf63457b32e7e153630aaa85644d162f132636c..fff12beed71eea10e9b2b79ab96b0460ce02ca91 100644
--- a/spec/services/projects/housekeeping_service_spec.rb
+++ b/spec/services/projects/housekeeping_service_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::HousekeepingService do
-  subject { Projects::HousekeepingService.new(project) }
+  subject { described_class.new(project) }
   let(:project) { create(:project, :repository) }
 
   before do
diff --git a/spec/tasks/config_lint_spec.rb b/spec/tasks/config_lint_spec.rb
index c32f9a740b7baa2e3334277d5a6b1f3eb294e4dd..ed6c5b096635b5ae5bbf0c309ecb64045ff460ea 100644
--- a/spec/tasks/config_lint_spec.rb
+++ b/spec/tasks/config_lint_spec.rb
@@ -5,11 +5,11 @@ describe ConfigLint do
   let(:files){ ['lib/support/fake.sh'] }
 
   it 'errors out if any bash scripts have errors' do
-    expect { ConfigLint.run(files){ system('exit 1') } }.to raise_error(SystemExit)
+    expect { described_class.run(files){ system('exit 1') } }.to raise_error(SystemExit)
   end
 
   it 'passes if all scripts are fine' do
-    expect { ConfigLint.run(files){ system('exit 0') } }.not_to raise_error
+    expect { described_class.run(files){ system('exit 0') } }.not_to raise_error
   end
 end
 
diff --git a/spec/workers/delete_user_worker_spec.rb b/spec/workers/delete_user_worker_spec.rb
index 0765573408cf3cc403e77d234dba3f89703f7754..5912dd76262fbd9d954763d3068cd5c182214fc4 100644
--- a/spec/workers/delete_user_worker_spec.rb
+++ b/spec/workers/delete_user_worker_spec.rb
@@ -8,13 +8,13 @@ describe DeleteUserWorker do
     expect_any_instance_of(Users::DestroyService).to receive(:execute).
                                                       with(user, {})
 
-    DeleteUserWorker.new.perform(current_user.id, user.id)
+    described_class.new.perform(current_user.id, user.id)
   end
 
   it "uses symbolized keys" do
     expect_any_instance_of(Users::DestroyService).to receive(:execute).
                                                       with(user, test: "test")
 
-    DeleteUserWorker.new.perform(current_user.id, user.id, "test" => "test")
+    described_class.new.perform(current_user.id, user.id, "test" => "test")
   end
 end
diff --git a/spec/workers/emails_on_push_worker_spec.rb b/spec/workers/emails_on_push_worker_spec.rb
index 8cf2b888f9a2fdf05da041a05c57c081d98c36e4..a0ed85cc0b37fdfec1acfaf429a926a291cc0c47 100644
--- a/spec/workers/emails_on_push_worker_spec.rb
+++ b/spec/workers/emails_on_push_worker_spec.rb
@@ -12,7 +12,7 @@ describe EmailsOnPushWorker do
   let(:perform) { subject.perform(project.id, recipients, data.stringify_keys) }
   let(:email) { ActionMailer::Base.deliveries.last }
 
-  subject { EmailsOnPushWorker.new }
+  subject { described_class.new }
 
   describe "#perform" do
     context "when push is a new branch" do
diff --git a/spec/workers/git_garbage_collect_worker_spec.rb b/spec/workers/git_garbage_collect_worker_spec.rb
index 029f35512e07ad5651900b390951e74fbfb75bf9..7a590f64e3c602fd89c0213cb1605680c6b37c78 100644
--- a/spec/workers/git_garbage_collect_worker_spec.rb
+++ b/spec/workers/git_garbage_collect_worker_spec.rb
@@ -6,7 +6,7 @@ describe GitGarbageCollectWorker do
   let(:project) { create(:project, :repository) }
   let(:shell) { Gitlab::Shell.new }
 
-  subject { GitGarbageCollectWorker.new }
+  subject { described_class.new }
 
   describe "#perform" do
     it "flushes ref caches when the task is 'gc'" do
diff --git a/spec/workers/gitlab_usage_ping_worker_spec.rb b/spec/workers/gitlab_usage_ping_worker_spec.rb
index b6c080f36f4769a8bfb93148ec681bb3e76df189..262410445337bc4c35da638b4f5dcadd6be4265d 100644
--- a/spec/workers/gitlab_usage_ping_worker_spec.rb
+++ b/spec/workers/gitlab_usage_ping_worker_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe GitlabUsagePingWorker do
-  subject { GitlabUsagePingWorker.new }
+  subject { described_class.new }
 
   it "sends POST request" do
     stub_application_setting(usage_ping_enabled: true)
diff --git a/spec/workers/group_destroy_worker_spec.rb b/spec/workers/group_destroy_worker_spec.rb
index 1ff5a3b903438ec7cb21f96c54be564e6c100508..c78efc67076f6a62c862e51021a841d93fc0358f 100644
--- a/spec/workers/group_destroy_worker_spec.rb
+++ b/spec/workers/group_destroy_worker_spec.rb
@@ -5,7 +5,7 @@ describe GroupDestroyWorker do
   let(:user) { create(:admin) }
   let!(:project) { create(:empty_project, namespace: group) }
 
-  subject { GroupDestroyWorker.new }
+  subject { described_class.new }
 
   describe "#perform" do
     it "deletes the project" do
diff --git a/spec/workers/merge_worker_spec.rb b/spec/workers/merge_worker_spec.rb
index b5e1fdb8ded40ae24e14226c5bb107d6daa0e10a..303193bab9bce2aa6d0f90726186a63c7eb59808 100644
--- a/spec/workers/merge_worker_spec.rb
+++ b/spec/workers/merge_worker_spec.rb
@@ -15,7 +15,7 @@ describe MergeWorker do
     it 'clears cache of source repo after removing source branch' do
       expect(source_project.repository.branch_names).to include('markdown')
 
-      MergeWorker.new.perform(
+      described_class.new.perform(
         merge_request.id, merge_request.author_id,
         commit_message: 'wow such merge',
         should_remove_source_branch: true)
diff --git a/spec/workers/post_receive_spec.rb b/spec/workers/post_receive_spec.rb
index a2a559a2369a7545a60562d1ec4dd00a24c6650a..5ab3c4a0e341bfb1a78888fd04a4d11e189503c7 100644
--- a/spec/workers/post_receive_spec.rb
+++ b/spec/workers/post_receive_spec.rb
@@ -10,7 +10,7 @@ describe PostReceive do
 
   context "as a resque worker" do
     it "reponds to #perform" do
-      expect(PostReceive.new).to respond_to(:perform)
+      expect(described_class.new).to respond_to(:perform)
     end
   end
 
@@ -25,7 +25,7 @@ describe PostReceive do
       it "calls GitTagPushService" do
         expect_any_instance_of(GitPushService).to receive(:execute).and_return(true)
         expect_any_instance_of(GitTagPushService).not_to receive(:execute)
-        PostReceive.new.perform(pwd(project), key_id, base64_changes)
+        described_class.new.perform(pwd(project), key_id, base64_changes)
       end
     end
 
@@ -35,7 +35,7 @@ describe PostReceive do
       it "calls GitTagPushService" do
         expect_any_instance_of(GitPushService).not_to receive(:execute)
         expect_any_instance_of(GitTagPushService).to receive(:execute).and_return(true)
-        PostReceive.new.perform(pwd(project), key_id, base64_changes)
+        described_class.new.perform(pwd(project), key_id, base64_changes)
       end
     end
 
@@ -45,12 +45,12 @@ describe PostReceive do
       it "does not call any of the services" do
         expect_any_instance_of(GitPushService).not_to receive(:execute)
         expect_any_instance_of(GitTagPushService).not_to receive(:execute)
-        PostReceive.new.perform(pwd(project), key_id, base64_changes)
+        described_class.new.perform(pwd(project), key_id, base64_changes)
       end
     end
 
     context "gitlab-ci.yml" do
-      subject { PostReceive.new.perform(pwd(project), key_id, base64_changes) }
+      subject { described_class.new.perform(pwd(project), key_id, base64_changes) }
 
       context "creates a Ci::Pipeline for every change" do
         before do
@@ -75,7 +75,7 @@ describe PostReceive do
   context "webhook" do
     it "fetches the correct project" do
       expect(Project).to receive(:find_by_full_path).with(project.path_with_namespace).and_return(project)
-      PostReceive.new.perform(pwd(project), key_id, base64_changes)
+      described_class.new.perform(pwd(project), key_id, base64_changes)
     end
 
     it "does not run if the author is not in the project" do
@@ -85,7 +85,7 @@ describe PostReceive do
 
       expect(project).not_to receive(:execute_hooks)
 
-      expect(PostReceive.new.perform(pwd(project), key_id, base64_changes)).to be_falsey
+      expect(described_class.new.perform(pwd(project), key_id, base64_changes)).to be_falsey
     end
 
     it "asks the project to trigger all hooks" do
@@ -93,14 +93,14 @@ describe PostReceive do
       expect(project).to receive(:execute_hooks).twice
       expect(project).to receive(:execute_services).twice
 
-      PostReceive.new.perform(pwd(project), key_id, base64_changes)
+      described_class.new.perform(pwd(project), key_id, base64_changes)
     end
 
     it "enqueues a UpdateMergeRequestsWorker job" do
       allow(Project).to receive(:find_by_full_path).and_return(project)
       expect(UpdateMergeRequestsWorker).to receive(:perform_async).with(project.id, project.owner.id, any_args)
 
-      PostReceive.new.perform(pwd(project), key_id, base64_changes)
+      described_class.new.perform(pwd(project), key_id, base64_changes)
     end
   end
 
diff --git a/spec/workers/project_destroy_worker_spec.rb b/spec/workers/project_destroy_worker_spec.rb
index 0ab42f995103df12f31caba24f488823f7416a77..3d135f40c1fcd9a17f8994fe4c3aadc522f0f4bb 100644
--- a/spec/workers/project_destroy_worker_spec.rb
+++ b/spec/workers/project_destroy_worker_spec.rb
@@ -4,7 +4,7 @@ describe ProjectDestroyWorker do
   let(:project) { create(:project, :repository) }
   let(:path) { project.repository.path_to_repo }
 
-  subject { ProjectDestroyWorker.new }
+  subject { described_class.new }
 
   describe "#perform" do
     it "deletes the project" do
diff --git a/spec/workers/remove_expired_members_worker_spec.rb b/spec/workers/remove_expired_members_worker_spec.rb
index 402aa1e714e44557a7a1f44266a70eb9d95280c2..058fdf4c0094752e6e988d9f2e2356de7637a7a7 100644
--- a/spec/workers/remove_expired_members_worker_spec.rb
+++ b/spec/workers/remove_expired_members_worker_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe RemoveExpiredMembersWorker do
-  let(:worker) { RemoveExpiredMembersWorker.new }
+  let(:worker) { described_class.new }
 
   describe '#perform' do
     context 'project members' do
diff --git a/spec/workers/remove_unreferenced_lfs_objects_worker_spec.rb b/spec/workers/remove_unreferenced_lfs_objects_worker_spec.rb
index 6d42946de3875599d0e95431570cb472cd294a24..1c183ce54f4409ed27b6deef50e9645414b371da 100644
--- a/spec/workers/remove_unreferenced_lfs_objects_worker_spec.rb
+++ b/spec/workers/remove_unreferenced_lfs_objects_worker_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe RemoveUnreferencedLfsObjectsWorker do
-  let(:worker) { RemoveUnreferencedLfsObjectsWorker.new }
+  let(:worker) { described_class.new }
 
   describe '#perform' do
     let!(:unreferenced_lfs_object1) { create(:lfs_object, oid: '1') }
diff --git a/spec/workers/repository_fork_worker_spec.rb b/spec/workers/repository_fork_worker_spec.rb
index 7d6a2db29720386b5e67d8bc3697bc1a3aff1295..5e1cb74c7fcf75ef6524e647b8ac45a426a46abb 100644
--- a/spec/workers/repository_fork_worker_spec.rb
+++ b/spec/workers/repository_fork_worker_spec.rb
@@ -5,7 +5,7 @@ describe RepositoryForkWorker do
   let(:fork_project) { create(:project, :repository, forked_from_project: project) }
   let(:shell) { Gitlab::Shell.new }
 
-  subject { RepositoryForkWorker.new }
+  subject { described_class.new }
 
   before do
     allow(subject).to receive(:gitlab_shell).and_return(shell)