diff --git a/.eslintignore b/.eslintignore
index b7769ef89708e518341d2e0b5ee08f296eb50d6f..1d069e193855d3559132d411cb415959b0769d16 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -9,4 +9,3 @@
 /sitespeed-result/
 /fixtures/**/*.graphql
 spec/fixtures/**/*.graphql
-**/contracts/consumer/
diff --git a/spec/contracts/consumer/.eslintrc.yml b/spec/contracts/consumer/.eslintrc.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e4b380714d3536eb7c853bd634a9b8cf2e74afb4
--- /dev/null
+++ b/spec/contracts/consumer/.eslintrc.yml
@@ -0,0 +1,7 @@
+---
+extends:
+  - 'plugin:@gitlab/jest'
+settings:
+  import/core-modules:
+    - '@pact-foundation/pact'
+    - jest-pact
diff --git a/spec/contracts/consumer/babel.config.json b/spec/contracts/consumer/babel.config.json
new file mode 100644
index 0000000000000000000000000000000000000000..1320b9a3272a5a4a9adc81859d52c68660d1b50d
--- /dev/null
+++ b/spec/contracts/consumer/babel.config.json
@@ -0,0 +1,3 @@
+{
+  "presets": ["@babel/preset-env"]
+}
diff --git a/spec/contracts/consumer/endpoints/merge_requests.js b/spec/contracts/consumer/endpoints/merge_requests.js
index 04e66c57dc9d51686f8577d5c713654ca242586b..ae4d5544df6d8543b3759eb5905a1800bb04bc92 100644
--- a/spec/contracts/consumer/endpoints/merge_requests.js
+++ b/spec/contracts/consumer/endpoints/merge_requests.js
@@ -1,42 +1,34 @@
-'use strict';
+import { request } from 'axios';
 
-const axios = require('axios');
+export function getMetadata(endpoint) {
+  const { url } = endpoint;
 
-exports.getMetadata = (endpoint) => {
-  const url = endpoint.url;
+  return request({
+    method: 'GET',
+    baseURL: url,
+    url: '/gitlab-org/gitlab-qa/-/merge_requests/1/diffs_metadata.json',
+    headers: { Accept: '*/*' },
+  }).then((response) => response.data);
+}
 
-  return axios
-    .request({
-      method: 'GET',
-      baseURL: url,
-      url: '/gitlab-org/gitlab-qa/-/merge_requests/1/diffs_metadata.json',
-      headers: { Accept: '*/*' },
-    })
-    .then((response) => response.data);
-};
+export function getDiscussions(endpoint) {
+  const { url } = endpoint;
 
-exports.getDiscussions = (endpoint) => {
-  const url = endpoint.url;
+  return request({
+    method: 'GET',
+    baseURL: url,
+    url: '/gitlab-org/gitlab-qa/-/merge_requests/1/discussions.json',
+    headers: { Accept: '*/*' },
+  }).then((response) => response.data);
+}
 
-  return axios
-    .request({
-      method: 'GET',
-      baseURL: url,
-      url: '/gitlab-org/gitlab-qa/-/merge_requests/1/discussions.json',
-      headers: { Accept: '*/*' },
-    })
-    .then((response) => response.data);
-};
+export function getDiffs(endpoint) {
+  const { url } = endpoint;
 
-exports.getDiffs = (endpoint) => {
-  const url = endpoint.url;
-
-  return axios
-    .request({
-      method: 'GET',
-      baseURL: url,
-      url: '/gitlab-org/gitlab-qa/-/merge_requests/1/diffs_batch.json?page=0',
-      headers: { Accept: '*/*' },
-    })
-    .then((response) => response.data);
-};
+  return request({
+    method: 'GET',
+    baseURL: url,
+    url: '/gitlab-org/gitlab-qa/-/merge_requests/1/diffs_batch.json?page=0',
+    headers: { Accept: '*/*' },
+  }).then((response) => response.data);
+}
diff --git a/spec/contracts/consumer/fixtures/diffs.fixture.js b/spec/contracts/consumer/fixtures/diffs.fixture.js
index 7dbe825b0935ac61e1d32fc94ce96edb847d28b3..cc2c054b08f49efbab63e3af678cdeea15f4ef3b 100644
--- a/spec/contracts/consumer/fixtures/diffs.fixture.js
+++ b/spec/contracts/consumer/fixtures/diffs.fixture.js
@@ -1,6 +1,6 @@
-'use strict';
+/* eslint-disable @gitlab/require-i18n-strings */
 
-const { Matchers } = require('@pact-foundation/pact');
+import { Matchers } from '@pact-foundation/pact';
 
 const body = {
   diff_files: Matchers.eachLike({
@@ -48,9 +48,9 @@ const body = {
     context_lines_path: Matchers.string('/gitlab-qa-bot/...'),
     highlighted_diff_lines: Matchers.eachLike({
       // The following values can also be null which is not supported
-      //line_code: Matchers.string('de3150c01c3a946a6168173c4116741379fe3579_1_1'),
-      //old_line: Matchers.integer(1),
-      //new_line: Matchers.integer(1),
+      // line_code: Matchers.string('de3150c01c3a946a6168173c4116741379fe3579_1_1'),
+      // old_line: Matchers.integer(1),
+      // new_line: Matchers.integer(1),
       text: Matchers.string('source'),
       rich_text: Matchers.string('<span></span>'),
       can_receive_suggestion: Matchers.boolean(true),
@@ -70,7 +70,7 @@ const Diffs = {
     headers: {
       'Content-Type': 'application/json; charset=utf-8',
     },
-    body: body,
+    body,
   },
 
   request: {
@@ -86,4 +86,5 @@ const Diffs = {
   },
 };
 
-exports.Diffs = Diffs;
+export { Diffs };
+/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/fixtures/discussions.fixture.js b/spec/contracts/consumer/fixtures/discussions.fixture.js
index c28b9bdd505665e3ac6fb539c153d0433829f41d..26f1d65f6630bad9f5f846f11109a9e8d0baee49 100644
--- a/spec/contracts/consumer/fixtures/discussions.fixture.js
+++ b/spec/contracts/consumer/fixtures/discussions.fixture.js
@@ -1,6 +1,6 @@
-'use strict';
+/* eslint-disable @gitlab/require-i18n-strings */
 
-const { Matchers } = require('@pact-foundation/pact');
+import { Matchers } from '@pact-foundation/pact';
 
 const body = Matchers.eachLike({
   id: Matchers.string('fd73763cbcbf7b29eb8765d969a38f7d735e222a'),
@@ -67,7 +67,7 @@ const Discussions = {
     headers: {
       'Content-Type': 'application/json; charset=utf-8',
     },
-    body: body,
+    body,
   },
 
   request: {
@@ -82,4 +82,5 @@ const Discussions = {
   },
 };
 
-exports.Discussions = Discussions;
+export { Discussions };
+/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/fixtures/metadata.fixture.js b/spec/contracts/consumer/fixtures/metadata.fixture.js
index 3fca6cf918194d7a1024e3e3e4f574f7a8afbc56..c19ca2175b3c53dedf9258eaaaae723747b32c89 100644
--- a/spec/contracts/consumer/fixtures/metadata.fixture.js
+++ b/spec/contracts/consumer/fixtures/metadata.fixture.js
@@ -1,6 +1,6 @@
-'use strict';
+/* eslint-disable @gitlab/require-i18n-strings */
 
-const { Matchers } = require('@pact-foundation/pact');
+import { Matchers } from '@pact-foundation/pact';
 
 const body = {
   real_size: Matchers.string('1'),
@@ -78,7 +78,7 @@ const Metadata = {
     headers: {
       'Content-Type': 'application/json; charset=utf-8',
     },
-    body: body,
+    body,
   },
 
   request: {
@@ -93,4 +93,5 @@ const Metadata = {
   },
 };
 
-exports.Metadata = Metadata;
+export { Metadata };
+/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/package.json b/spec/contracts/consumer/package.json
index 6a427ff8a7bb001eb8de34c738a88bbc414279d7..6d3feaa6d4c870e01f5da36c55731d7da232bc34 100644
--- a/spec/contracts/consumer/package.json
+++ b/spec/contracts/consumer/package.json
@@ -13,5 +13,14 @@
   },
   "scripts": {
     "test": "jest --runInBand"
+  },
+  "jest": {
+    "transform": {
+      "^.+\\.[t|j]sx?$": "babel-jest"
+    }
+  },
+  "devDependencies": {
+    "@babel/preset-env": "^7.18.2",
+    "babel-jest": "^28.1.1"
   }
 }
diff --git a/spec/contracts/consumer/specs/diffs.spec.js b/spec/contracts/consumer/specs/diffs.spec.js
index b812461cb69e14e765068c1a35c7cb07e340cce3..6b1cefdbdbc5c2aea8d79497092d8e15ecd71fa8 100644
--- a/spec/contracts/consumer/specs/diffs.spec.js
+++ b/spec/contracts/consumer/specs/diffs.spec.js
@@ -1,9 +1,9 @@
-'use strict';
+/* eslint-disable @gitlab/require-i18n-strings */
 
-const { pactWith } = require('jest-pact');
+import { pactWith } from 'jest-pact';
 
-const { Diffs } = require('../fixtures/diffs.fixture');
-const { getDiffs } = require('../endpoints/merge_requests');
+import { Diffs } from '../fixtures/diffs.fixture';
+import { getDiffs } from '../endpoints/merge_requests';
 
 pactWith(
   {
@@ -34,3 +34,4 @@ pactWith(
     });
   },
 );
+/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/specs/discussions.spec.js b/spec/contracts/consumer/specs/discussions.spec.js
index 304c240f7d35d5f7b811e4786318939dd5bf3d3c..2a5d0ba6267a894f3ccae9d4befa3a123d6214a5 100644
--- a/spec/contracts/consumer/specs/discussions.spec.js
+++ b/spec/contracts/consumer/specs/discussions.spec.js
@@ -1,9 +1,9 @@
-'use strict';
+/* eslint-disable @gitlab/require-i18n-strings */
 
-const { pactWith } = require('jest-pact');
+import { pactWith } from 'jest-pact';
 
-const { Discussions } = require('../fixtures/discussions.fixture');
-const { getDiscussions } = require('../endpoints/merge_requests');
+import { Discussions } from '../fixtures/discussions.fixture';
+import { getDiscussions } from '../endpoints/merge_requests';
 
 pactWith(
   {
@@ -34,3 +34,4 @@ pactWith(
     });
   },
 );
+/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/specs/metadata.spec.js b/spec/contracts/consumer/specs/metadata.spec.js
index c49d4c354b16101d81aa1b53d1c23b26dfdc2abb..fc082cb6a4668f0b5fda062263d846e088b033a8 100644
--- a/spec/contracts/consumer/specs/metadata.spec.js
+++ b/spec/contracts/consumer/specs/metadata.spec.js
@@ -1,9 +1,9 @@
-'use strict';
+/* eslint-disable @gitlab/require-i18n-strings */
 
-const { pactWith } = require('jest-pact');
+import { pactWith } from 'jest-pact';
 
-const { Metadata } = require('../fixtures/metadata.fixture');
-const { getMetadata } = require('../endpoints/merge_requests');
+import { Metadata } from '../fixtures/metadata.fixture';
+import { getMetadata } from '../endpoints/merge_requests';
 
 pactWith(
   {
@@ -34,3 +34,4 @@ pactWith(
     });
   },
 );
+/* eslint-enable @gitlab/require-i18n-strings */