diff --git a/app/assets/javascripts/projects/settings/repository/branch_rules/app.vue b/app/assets/javascripts/projects/settings/repository/branch_rules/app.vue
index 2406cdcf7fdecb787a87e77f226bd7c4ebe7311c..5720357bddb4f59e2871001b386076b202fcfcd0 100644
--- a/app/assets/javascripts/projects/settings/repository/branch_rules/app.vue
+++ b/app/assets/javascripts/projects/settings/repository/branch_rules/app.vue
@@ -166,6 +166,7 @@ export default {
     icon="branch"
     :count="branchRules.length"
     class="gl-mb-5"
+    :is-loading="$apollo.queries.branchRules.loading"
   >
     <template #actions>
       <gl-disclosure-dropdown
diff --git a/scripts/frontend/quarantined_vue3_specs.txt b/scripts/frontend/quarantined_vue3_specs.txt
index bed19163ea7c4e9c57180420a8cc3e8c1ac794fc..568b95a0e4ec5f74a683992cc812f86ca559d871 100644
--- a/scripts/frontend/quarantined_vue3_specs.txt
+++ b/scripts/frontend/quarantined_vue3_specs.txt
@@ -314,7 +314,6 @@ spec/frontend/projects/components/new_edit_form_spec.js
 spec/frontend/projects/new/components/new_project_url_select_spec.js
 spec/frontend/projects/report_abuse/components/report_abuse_dropdown_item_spec.js
 spec/frontend/projects/settings/components/branch_rule_modal_spec.js
-spec/frontend/projects/settings/repository/branch_rules/app_spec.js
 spec/frontend/projects/settings/topics/components/topics_token_selector_spec.js
 spec/frontend/projects/settings_service_desk/components/custom_email_form_spec.js
 spec/frontend/projects/settings_service_desk/components/service_desk_root_spec.js
diff --git a/spec/frontend/projects/settings/repository/branch_rules/app_spec.js b/spec/frontend/projects/settings/repository/branch_rules/app_spec.js
index a7ad7ab49e5232ac0b5308d20ea5fce841b4938b..da814c8231d08a986d86c0a0e33ddf243f234c61 100644
--- a/spec/frontend/projects/settings/repository/branch_rules/app_spec.js
+++ b/spec/frontend/projects/settings/repository/branch_rules/app_spec.js
@@ -7,6 +7,7 @@ import createMockApollo from 'helpers/mock_apollo_helper';
 import waitForPromises from 'helpers/wait_for_promises';
 import { mountExtended } from 'helpers/vue_test_utils_helper';
 import { useMockInternalEventsTracking } from 'helpers/tracking_internal_events_helper';
+import CrudComponent from '~/vue_shared/components/crud_component.vue';
 import BranchRules from '~/projects/settings/repository/branch_rules/app.vue';
 import BranchRule from '~/projects/settings/repository/branch_rules/components/branch_rule.vue';
 import branchRulesQuery from 'ee_else_ce/projects/settings/repository/branch_rules/graphql/queries/branch_rules.query.graphql';
@@ -84,10 +85,11 @@ describe('Branch rules app', () => {
   const findModal = () => wrapper.findComponent(GlModal);
   const findAddBranchRuleDropdown = () => wrapper.findComponent(GlDisclosureDropdown);
   const findCreateBranchRuleListbox = () => wrapper.findComponent(GlCollapsibleListbox);
+  const findCrudComponent = () => wrapper.findComponent(CrudComponent);
 
-  beforeEach(() => {
+  beforeEach(async () => {
     setWindowLocation(TEST_HOST);
-    createComponent();
+    await createComponent();
   });
 
   it('renders branch rules', async () => {
@@ -111,6 +113,13 @@ describe('Branch rules app', () => {
     expect(createAlert).toHaveBeenCalledWith({ message: I18N.queryError });
   });
 
+  it('displays a loading state if branch rules query is pending', async () => {
+    createComponent({ queryHandler: jest.fn() });
+    expect(findCrudComponent().props('isLoading')).toBe(true);
+    await waitForPromises();
+    expect(findCrudComponent().props('isLoading')).toBe(false);
+  });
+
   it('displays an empty state if no branch rules are present', async () => {
     await createComponent({ queryHandler: jest.fn().mockRejectedValue() });
     expect(findEmptyState().text()).toBe(I18N.emptyState);
@@ -157,7 +166,9 @@ describe('Branch rules app', () => {
     });
 
     it('shows alert when mutation fails', async () => {
-      createComponent({ mutationHandler: jest.fn().mockRejectedValue() });
+      await createComponent({
+        mutationHandler: jest.fn().mockRejectedValue(),
+      });
       findCreateBranchRuleListbox().vm.$emit('select', 'main');
       await nextTick();
       findModal().vm.$emit('primary');
@@ -223,8 +234,10 @@ describe('Branch rules app', () => {
   });
 
   describe('Add branch rule when editBranchRules FF disabled', () => {
-    beforeEach(() => {
-      createComponent({ glFeatures: { editBranchRules: false } });
+    beforeEach(async () => {
+      await createComponent({
+        glFeatures: { editBranchRules: false },
+      });
     });
     it('renders an Add branch rule button', () => {
       expect(findAddBranchRuleButton().exists()).toBe(true);