diff --git a/spec/services/packages/npm/create_package_service_spec.rb b/spec/services/packages/npm/create_package_service_spec.rb
index 8c4a86b500b57a7197b7234b97dadfa035e704c7..a461e2b0d39aef07808f2389d010e9002a8db7b6 100644
--- a/spec/services/packages/npm/create_package_service_spec.rb
+++ b/spec/services/packages/npm/create_package_service_spec.rb
@@ -25,10 +25,6 @@
     let(:version_data) { params.dig('versions', version) }
     let(:lease_key) { "packages:npm:create_package_service:packages:#{project.id}_#{package_name}_#{version}" }
 
-    shared_examples 'valid service response' do
-      it { is_expected.to be_success }
-    end
-
     shared_examples 'valid package' do
       let(:package) { subject[:package] }
 
@@ -173,28 +169,28 @@
     end
 
     context 'scoped package' do
-      it_behaves_like 'valid service response'
+      it_behaves_like 'returning a success service response'
       it_behaves_like 'valid package'
     end
 
     context 'when user is no project member' do
       let_it_be(:user) { create(:user) }
 
-      it_behaves_like 'valid service response'
+      it_behaves_like 'returning a success service response'
       it_behaves_like 'valid package'
     end
 
     context 'scoped package not following the naming convention' do
       let(:package_name) { '@any-scope/package' }
 
-      it_behaves_like 'valid service response'
+      it_behaves_like 'returning a success service response'
       it_behaves_like 'valid package'
     end
 
     context 'unscoped package' do
       let(:package_name) { 'unscoped-package' }
 
-      it_behaves_like 'valid service response'
+      it_behaves_like 'returning a success service response'
       it_behaves_like 'valid package'
     end
 
@@ -202,8 +198,9 @@
       let(:package_name) { "@#{namespace.path}/my_package" }
       let!(:existing_package) { create(:npm_package, project: project, name: package_name, version: '1.0.1') }
 
-      it { is_expected.to be_error }
-      it { is_expected.to have_attributes message: 'Package already exists.', reason: :package_already_exists }
+      it_behaves_like 'returning an error service response', message: 'Package already exists.' do
+        it { is_expected.to have_attributes reason: :package_already_exists }
+      end
 
       context 'marked as pending_destruction' do
         before do
@@ -224,8 +221,9 @@
       let(:max_file_size) { 5.bytes }
 
       shared_examples_for 'max file size validation failure' do
-        it { is_expected.to be_error }
-        it { is_expected.to have_attributes message: 'File is too large.', reason: :invalid_parameter }
+        it_behaves_like 'returning an error service response', message: 'File is too large.' do
+          it { is_expected.to have_attributes reason: :invalid_parameter }
+        end
       end
 
       before do
@@ -285,8 +283,9 @@
     context 'with empty versions' do
       let(:params) { super().merge!({ versions: {} }) }
 
-      it { is_expected.to be_error }
-      it { is_expected.to have_attributes message: 'Version is empty.', reason: :invalid_parameter }
+      it_behaves_like 'returning an error service response', message: 'Version is empty.' do
+        it { is_expected.to have_attributes reason: :invalid_parameter }
+      end
     end
 
     context 'with invalid versions' do
@@ -308,8 +307,9 @@
     context 'with empty attachment data' do
       let(:params) { super().merge({ _attachments: { "#{package_name}-#{version}.tgz" => { data: '' } } }) }
 
-      it { is_expected.to be_error }
-      it { is_expected.to have_attributes message: 'Attachment data is empty.', reason: :invalid_parameter }
+      it_behaves_like 'returning an error service response', message: 'Attachment data is empty.' do
+        it { is_expected.to have_attributes reason: :invalid_parameter }
+      end
     end
 
     it 'obtains a lease to create a new package' do
@@ -323,8 +323,9 @@
         stub_exclusive_lease_taken(lease_key, timeout: described_class::DEFAULT_LEASE_TIMEOUT)
       end
 
-      it { is_expected.to be_error }
-      it { is_expected.to have_attributes message: 'Could not obtain package lease. Please try again.', reason: :package_lease_taken }
+      it_behaves_like 'returning an error service response', message: 'Could not obtain package lease. Please try again.' do
+        it { is_expected.to have_attributes reason: :package_lease_taken }
+      end
     end
 
     context 'when feature flag :packages_protected_packages disabled' do
@@ -369,8 +370,9 @@
       let(:service) { described_class.new(project, current_user, params) }
 
       shared_examples 'protected package' do
-        it { is_expected.to be_error }
-        it { is_expected.to have_attributes message: 'Package protected.', reason: :package_protected }
+        it_behaves_like 'returning an error service response', message: 'Package protected.' do
+          it { is_expected.to have_attributes reason: :package_protected }
+        end
 
         it 'does not create any npm-related package records' do
           expect { subject }