From 855c9cd261b2aeac23e508d66d217661c1da79a2 Mon Sep 17 00:00:00 2001
From: Caleb Cartwright <calebcartwright@users.noreply.github.com>
Date: Tue, 5 Feb 2019 20:51:55 -0600
Subject: [PATCH] Remove dev dep imports in production code (#2937)

Fixes #2876 with @paulmelnikow's suggestion

Moved imports of `ServiceTester` and `createServiceTester` to a separate file so that dev dependencies are not imported by service classes.
---
 doc/deprecating-badges.md                                | 4 ++--
 doc/rewriting-services.md                                | 2 +-
 doc/service-tests.md                                     | 4 ++--
 services/amo/amo.tester.js                               | 2 +-
 services/ansible/ansible-quality.tester.js               | 2 +-
 services/ansible/ansible-role.tester.js                  | 2 +-
 services/apm/apm.tester.js                               | 2 +-
 services/appveyor/appveyor-ci.tester.js                  | 2 +-
 services/appveyor/appveyor-tests.tester.js               | 2 +-
 services/aur/aur.tester.js                               | 2 +-
 services/azure-devops/azure-devops-build.tester.js       | 2 +-
 services/azure-devops/azure-devops-coverage.tester.js    | 2 +-
 services/azure-devops/azure-devops-release.tester.js     | 2 +-
 services/azure-devops/azure-devops-tests.tester.js       | 2 +-
 services/beerpay/beerpay.tester.js                       | 2 +-
 services/bintray/bintray.tester.js                       | 2 +-
 services/bitbucket/bitbucket.tester.js                   | 2 +-
 services/bithound/bithound.tester.js                     | 2 +-
 services/bitrise/bitrise.tester.js                       | 2 +-
 services/bountysource/bountysource.tester.js             | 2 +-
 services/bower/bower.tester.js                           | 2 +-
 services/bstats/bstats-players.tester.js                 | 2 +-
 services/bstats/bstats-servers.tester.js                 | 2 +-
 services/bugzilla/bugzilla.tester.js                     | 2 +-
 services/buildkite/buildkite.tester.js                   | 2 +-
 services/bundlephobia/bundlephobia.tester.js             | 2 +-
 services/cauditor/cauditor.tester.js                     | 2 +-
 services/cdnjs/cdnjs.tester.js                           | 2 +-
 services/chocolatey/chocolatey.tester.js                 | 2 +-
 services/chrome-web-store/chrome-web-store.tester.js     | 2 +-
 services/cii-best-practices/cii-best-practices.tester.js | 2 +-
 services/circleci/circleci.tester.js                     | 2 +-
 services/clojars/clojars-downloads.tester.js             | 2 +-
 services/clojars/clojars-version.tester.js               | 2 +-
 services/cocoapods/cocoapods-apps.tester.js              | 2 +-
 services/cocoapods/cocoapods-downloads.tester.js         | 2 +-
 services/cocoapods/cocoapods-license.tester.js           | 2 +-
 services/cocoapods/cocoapods-metrics.tester.js           | 2 +-
 services/cocoapods/cocoapods-platform.tester.js          | 2 +-
 services/cocoapods/cocoapods-version.tester.js           | 2 +-
 services/codacy/codacy-coverage.tester.js                | 2 +-
 services/codacy/codacy-grade.tester.js                   | 2 +-
 services/codeclimate/codeclimate.tester.js               | 2 +-
 services/codecov/codecov.tester.js                       | 2 +-
 services/codeship/codeship.tester.js                     | 2 +-
 services/codetally/codetally.tester.js                   | 2 +-
 services/conda/conda.tester.js                           | 2 +-
 services/continuousphp/continuousphp.tester.js           | 2 +-
 services/cookbook/cookbook.tester.js                     | 2 +-
 services/coveralls/coveralls.tester.js                   | 2 +-
 services/coverity/coverity-on-demand.tester.js           | 2 +-
 services/coverity/coverity-scan.tester.js                | 2 +-
 services/cpan/cpan-license.tester.js                     | 2 +-
 services/cpan/cpan-version.tester.js                     | 2 +-
 services/cran/cran.tester.js                             | 2 +-
 services/crates/crates-downloads.tester.js               | 2 +-
 services/crates/crates-license.tester.js                 | 2 +-
 services/crates/crates-version.tester.js                 | 2 +-
 services/ctan/ctan.tester.js                             | 2 +-
 services/date/date.tester.js                             | 2 +-
 services/david/david.tester.js                           | 2 +-
 services/debug/debug.tester.js                           | 2 +-
 services/dependabot/dependabot.tester.js                 | 2 +-
 services/depfu/depfu.tester.js                           | 2 +-
 services/discord/discord.tester.js                       | 2 +-
 services/discourse/discourse.tester.js                   | 2 +-
 services/dockbit/dockbit.tester.js                       | 2 +-
 services/docker/docker-automated.tester.js               | 2 +-
 services/docker/docker-build.tester.js                   | 2 +-
 services/docker/docker-pulls.tester.js                   | 2 +-
 services/docker/docker-stars.tester.js                   | 2 +-
 services/dotnetstatus/dotnetstatus.tester.js             | 2 +-
 services/dub/dub-download.tester.js                      | 2 +-
 services/dub/dub-license.tester.js                       | 2 +-
 services/dub/dub-version.tester.js                       | 2 +-
 services/dynamic/dynamic-json.tester.js                  | 2 +-
 services/dynamic/dynamic-xml.tester.js                   | 2 +-
 services/dynamic/dynamic-yaml.tester.js                  | 2 +-
 .../eclipse-marketplace-downloads.tester.js              | 2 +-
 .../eclipse-marketplace-favorites.tester.js              | 2 +-
 .../eclipse-marketplace-license.tester.js                | 2 +-
 .../eclipse-marketplace-update.tester.js                 | 2 +-
 .../eclipse-marketplace-version.tester.js                | 2 +-
 services/elm-package/elm-package.tester.js               | 2 +-
 services/endpoint/endpoint.tester.js                     | 2 +-
 services/f-droid/f-droid.tester.js                       | 2 +-
 services/flip/flip.tester.js                             | 2 +-
 services/gem/gem-downloads.tester.js                     | 2 +-
 services/gem/gem-owner.tester.js                         | 2 +-
 services/gem/gem-rank.tester.js                          | 2 +-
 services/gem/gem-version.tester.js                       | 2 +-
 services/gemnasium/gemnasium.tester.js                   | 2 +-
 services/github/github-commit-activity.tester.js         | 2 +-
 services/github/github-commit-status.tester.js           | 2 +-
 services/github/github-commits-since.tester.js           | 2 +-
 services/github/github-contributors.tester.js            | 2 +-
 services/github/github-downloads.tester.js               | 2 +-
 services/github/github-followers.tester.js               | 2 +-
 services/github/github-forks.tester.js                   | 2 +-
 services/github/github-issue-detail.tester.js            | 2 +-
 services/github/github-issues.tester.js                  | 2 +-
 services/github/github-languages.tester.js               | 2 +-
 services/github/github-last-commit.tester.js             | 2 +-
 services/github/github-license.tester.js                 | 2 +-
 services/github/github-manifest.tester.js                | 2 +-
 services/github/github-package-json.tester.js            | 2 +-
 .../github/github-pull-request-check-state.tester.js     | 2 +-
 services/github/github-release.tester.js                 | 2 +-
 services/github/github-repo-size.tester.js               | 2 +-
 services/github/github-search.tester.js                  | 2 +-
 services/github/github-size.tester.js                    | 2 +-
 services/github/github-stars.tester.js                   | 2 +-
 services/github/github-tag.tester.js                     | 2 +-
 services/github/github-watchers.tester.js                | 2 +-
 services/gitlab/gitlab-pipeline-status.tester.js         | 2 +-
 services/gitter/gitter.tester.js                         | 2 +-
 services/gratipay/gratipay.tester.js                     | 2 +-
 services/hackage/hackage-deps.tester.js                  | 2 +-
 services/hackage/hackage-version.tester.js               | 2 +-
 services/hexpm/hexpm.tester.js                           | 2 +-
 services/homebrew/homebrew.tester.js                     | 2 +-
 services/imagelayers/imagelayers.tester.js               | 2 +-
 services/index.js                                        | 4 ----
 services/issuestats/issuestats.tester.js                 | 2 +-
 services/itunes/itunes.tester.js                         | 2 +-
 services/jenkins/jenkins-coverage.tester.js              | 2 +-
 services/jenkins/jenkins-plugin-installs.tester.js       | 2 +-
 services/jenkins/jenkins-plugin-version.tester.js        | 2 +-
 services/jetbrains/jetbrains.tester.js                   | 2 +-
 services/jira/jira-issue.tester.js                       | 2 +-
 services/jira/jira-sprint.tester.js                      | 2 +-
 services/jitpack/jitpack.tester.js                       | 2 +-
 services/leanpub/leanpub-book-summary.tester.js          | 2 +-
 services/lgtm/lgtm.tester.js                             | 2 +-
 services/liberapay/liberapay-gives.tester.js             | 2 +-
 services/liberapay/liberapay-goal.tester.js              | 2 +-
 services/liberapay/liberapay-patrons.tester.js           | 2 +-
 services/liberapay/liberapay-receives.tester.js          | 2 +-
 services/librariesio/librariesio-dependencies.tester.js  | 2 +-
 .../librariesio/librariesio-dependent-repos.tester.js    | 2 +-
 services/librariesio/librariesio-dependents.tester.js    | 2 +-
 services/librariesio/librariesio-sourcerank.tester.js    | 2 +-
 services/libscore/libscore.tester.js                     | 2 +-
 services/luarocks/luarocks.tester.js                     | 2 +-
 services/magnumci/magnumci.tester.js                     | 2 +-
 services/maintenance/maintenance.tester.js               | 2 +-
 services/matrix/matrix.tester.js                         | 2 +-
 services/maven-central/maven-central.tester.js           | 2 +-
 services/maven-metadata/maven-metadata.tester.js         | 2 +-
 services/microbadger/microbadger.tester.js               | 2 +-
 services/myget/myget.tester.js                           | 2 +-
 services/nexus/nexus.tester.js                           | 2 +-
 services/node/node.tester.js                             | 2 +-
 services/npm/npm-collaborators.tester.js                 | 2 +-
 services/npm/npm-dependency-version.tester.js            | 2 +-
 services/npm/npm-downloads.tester.js                     | 2 +-
 services/npm/npm-license.tester.js                       | 2 +-
 services/npm/npm-type-definitions.tester.js              | 2 +-
 services/npm/npm-version.tester.js                       | 2 +-
 services/nsp/nsp.tester.js                               | 2 +-
 services/nuget/nuget.tester.js                           | 2 +-
 services/opencollective/opencollective-all.tester.js     | 2 +-
 services/opencollective/opencollective-backers.tester.js | 2 +-
 services/opencollective/opencollective-by-tier.tester.js | 2 +-
 .../opencollective/opencollective-sponsors.tester.js     | 2 +-
 services/osslifecycle/osslifecycle.tester.js             | 2 +-
 services/packagecontrol/packagecontrol.tester.js         | 2 +-
 services/packagist/packagist.tester.js                   | 2 +-
 services/php-eye/php-eye-hhvm.tester.js                  | 2 +-
 services/php-eye/php-eye-php-version.tester.js           | 2 +-
 services/powershellgallery/powershellgallery.tester.js   | 2 +-
 services/pub/pub.tester.js                               | 2 +-
 services/puppetforge/puppetforge-modules.tester.js       | 2 +-
 services/pypi/pypi.tester.js                             | 2 +-
 services/readthedocs/readthedocs.tester.js               | 2 +-
 services/redmine/redmine.tester.js                       | 2 +-
 services/requires/requires.tester.js                     | 2 +-
 services/resharper/resharper.tester.js                   | 2 +-
 services/scrutinizer/scrutinizer.tester.js               | 2 +-
 services/shippable/shippable.tester.js                   | 2 +-
 services/snap-ci/snap-ci.tester.js                       | 2 +-
 services/snyk/snyk-vulnerability-github.tester.js        | 2 +-
 services/snyk/snyk-vulnerability-npm.tester.js           | 2 +-
 services/sonarqube/sonarqube.tester.js                   | 2 +-
 services/sourceforge/sourceforge.tester.js               | 2 +-
 services/sourcegraph/sourcegraph.tester.js               | 2 +-
 services/spiget/spiget-download-size.tester.js           | 2 +-
 services/spiget/spiget-downloads.tester.js               | 2 +-
 services/spiget/spiget-latest-version.tester.js          | 2 +-
 services/spiget/spiget-rating.tester.js                  | 2 +-
 services/spiget/spiget-tested-versions.tester.js         | 2 +-
 .../stackexchange-monthlyquestions.tester.js             | 2 +-
 .../stackexchange/stackexchange-reputation.tester.js     | 2 +-
 services/stackexchange/stackexchange-taginfo.tester.js   | 2 +-
 services/static-badge/static-badge.tester.js             | 2 +-
 services/steam/steam-workshop.tester.js                  | 2 +-
 services/swagger/swagger.tester.js                       | 2 +-
 services/symfony/symfony-insight.tester.js               | 2 +-
 services/teamcity/teamcity-build.tester.js               | 2 +-
 services/teamcity/teamcity-coverage.tester.js            | 2 +-
 services/tester.js                                       | 9 +++++++++
 services/travis/travis-build.tester.js                   | 2 +-
 services/travis/travis-php-version.tester.js             | 2 +-
 services/twitter/twitter.tester.js                       | 2 +-
 services/uptimerobot/uptimerobot-ratio.tester.js         | 2 +-
 services/uptimerobot/uptimerobot-status.tester.js        | 2 +-
 services/vaadin-directory/vaadin-directory.tester.js     | 2 +-
 services/versioneye/versioneye.tester.js                 | 2 +-
 ...al-studio-marketplace-azure-devops-installs.tester.js | 2 +-
 .../visual-studio-marketplace-downloads.tester.js        | 2 +-
 .../visual-studio-marketplace-rating.tester.js           | 2 +-
 .../visual-studio-marketplace-version.tester.js          | 2 +-
 services/waffle/waffle.tester.js                         | 2 +-
 services/website/website.tester.js                       | 2 +-
 services/wercker/wercker.tester.js                       | 2 +-
 services/wheelmap/wheelmap.tester.js                     | 2 +-
 services/wordpress/wordpress-downloads.tester.js         | 2 +-
 services/wordpress/wordpress-platform.tester.js          | 2 +-
 services/wordpress/wordpress-rating.tester.js            | 2 +-
 services/wordpress/wordpress-version.tester.js           | 2 +-
 220 files changed, 229 insertions(+), 224 deletions(-)
 create mode 100644 services/tester.js

diff --git a/doc/deprecating-badges.md b/doc/deprecating-badges.md
index 4af6608488..69aa5359bf 100644
--- a/doc/deprecating-badges.md
+++ b/doc/deprecating-badges.md
@@ -43,7 +43,7 @@ Locate the test file(s) for the service, which can be found in `*.tester.js` fil
 With `DeprecatedService` classes we cannot use `createServiceTester()` so you will need to create the `ServiceTester` class directly. For example:
 
 ```js
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'imagelayers',
@@ -69,7 +69,7 @@ Here is an example of what the final result would look like for a test file:
 ```js
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'imagelayers',
diff --git a/doc/rewriting-services.md b/doc/rewriting-services.md
index aabac962fe..e866652ed1 100644
--- a/doc/rewriting-services.md
+++ b/doc/rewriting-services.md
@@ -278,7 +278,7 @@ https://github.com/hapijs/joi/blob/master/API.md
 Switch to `createServiceTester`:
 
 ```js
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 ```
 
 This may require updating the URLs, which will be relative to the service's base
diff --git a/doc/service-tests.md b/doc/service-tests.md
index 3238efa6ec..0660f8a576 100644
--- a/doc/service-tests.md
+++ b/doc/service-tests.md
@@ -37,14 +37,14 @@ We'll start by adding some boilerplate to our file:
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 ```
 
 1. Import [Joi][] We'll use this to make assertions. This is the same library
    we use to define schema for validation in the main badge class.
 
 2. If our `.service.js` module exports a single class, we can
-   `require('..').createServiceTester()`, which uses convention to create a
+   `require('../tester').createServiceTester()`, which uses convention to create a
    `ServiceTester` object. Calling this inside
    `services/wercker/wercker.tester.js` will create a `ServiceTester` object
    configured for the service exported in `services/wercker/wercker.service.js`.
diff --git a/services/amo/amo.tester.js b/services/amo/amo.tester.js
index d22e2d021c..0b9401cfaa 100644
--- a/services/amo/amo.tester.js
+++ b/services/amo/amo.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const {
   isMetric,
   isStarRating,
diff --git a/services/ansible/ansible-quality.tester.js b/services/ansible/ansible-quality.tester.js
index cb9dced030..5add4cb7c4 100644
--- a/services/ansible/ansible-quality.tester.js
+++ b/services/ansible/ansible-quality.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('quality score (valid)')
   .get('/432.json')
diff --git a/services/ansible/ansible-role.tester.js b/services/ansible/ansible-role.tester.js
index 15168be3fc..54e6b929e3 100644
--- a/services/ansible/ansible-role.tester.js
+++ b/services/ansible/ansible-role.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isMetric } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/apm/apm.tester.js b/services/apm/apm.tester.js
index 6a425a0141..af7aa38283 100644
--- a/services/apm/apm.tester.js
+++ b/services/apm/apm.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { invalidJSON } = require('../response-fixtures')
 const { isMetric, isVPlusTripleDottedVersion } = require('../test-validators')
 
diff --git a/services/appveyor/appveyor-ci.tester.js b/services/appveyor/appveyor-ci.tester.js
index c4545e23cd..0d53289510 100644
--- a/services/appveyor/appveyor-ci.tester.js
+++ b/services/appveyor/appveyor-ci.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('CI status')
   .timeout(10000)
diff --git a/services/appveyor/appveyor-tests.tester.js b/services/appveyor/appveyor-tests.tester.js
index cea78db0f6..cfd2fbb6b1 100644
--- a/services/appveyor/appveyor-tests.tester.js
+++ b/services/appveyor/appveyor-tests.tester.js
@@ -18,7 +18,7 @@ const isCompactCustomAppveyorTestTotals = Joi.string().regex(
   /^💃 [0-9]+( \| 🤦‍♀️ [0-9]+)?( \| 🤷 [0-9]+)?$/
 )
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Test status')
   .timeout(10000)
diff --git a/services/aur/aur.tester.js b/services/aur/aur.tester.js
index 216361f8d9..00633a9160 100644
--- a/services/aur/aur.tester.js
+++ b/services/aur/aur.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const {
   isVPlusDottedVersionNClausesWithOptionalSuffix,
   isMetric,
diff --git a/services/azure-devops/azure-devops-build.tester.js b/services/azure-devops/azure-devops-build.tester.js
index 3d26683e31..d7a47a4f9d 100644
--- a/services/azure-devops/azure-devops-build.tester.js
+++ b/services/azure-devops/azure-devops-build.tester.js
@@ -6,7 +6,7 @@ const { isBuildStatus } = require('../../lib/build-status')
 // https://dev.azure.com/totodem/Shields.io is a public Azure DevOps project
 // solely created for Shields.io testing.
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('default branch')
   .get(
diff --git a/services/azure-devops/azure-devops-coverage.tester.js b/services/azure-devops/azure-devops-coverage.tester.js
index 2fff1e6d1a..fae2041e9c 100644
--- a/services/azure-devops/azure-devops-coverage.tester.js
+++ b/services/azure-devops/azure-devops-coverage.tester.js
@@ -53,7 +53,7 @@ const secondLinesCovStat = {
 const expCoverageSingleReport = '83%'
 const expCoverageMultipleReports = '77%'
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('default branch coverage')
   .get(`${uriPrefix}/${linuxDefinitionId}.json`)
diff --git a/services/azure-devops/azure-devops-release.tester.js b/services/azure-devops/azure-devops-release.tester.js
index 72a213ece4..e1c5104125 100644
--- a/services/azure-devops/azure-devops-release.tester.js
+++ b/services/azure-devops/azure-devops-release.tester.js
@@ -6,7 +6,7 @@ const { isBuildStatus } = require('../../lib/build-status')
 // https://dev.azure.com/totodem/Shields.io is a public Azure DevOps project
 // solely created for Shields.io testing.
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('release status is succeeded')
   .get(
diff --git a/services/azure-devops/azure-devops-tests.tester.js b/services/azure-devops/azure-devops-tests.tester.js
index 1cad65dc04..ed4383659a 100644
--- a/services/azure-devops/azure-devops-tests.tester.js
+++ b/services/azure-devops/azure-devops-tests.tester.js
@@ -113,7 +113,7 @@ const isCompactCustomAzureDevOpsTestTotals = isAzureDevOpsTestTotals(
   true
 )
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('unknown build definition')
   .get(`${uriPrefix}/${nonExistentDefinitionId}.json`)
diff --git a/services/beerpay/beerpay.tester.js b/services/beerpay/beerpay.tester.js
index 82568ace5d..92e6024768 100644
--- a/services/beerpay/beerpay.tester.js
+++ b/services/beerpay/beerpay.tester.js
@@ -5,7 +5,7 @@ const { withRegex } = require('../test-validators')
 
 const amountOfMoney = withRegex(/^\$[0-9]+(\.[0-9]+)?/)
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('funding')
   .get('/hashdog/scrapfy-chrome-extension.json')
diff --git a/services/bintray/bintray.tester.js b/services/bintray/bintray.tester.js
index c84b3627c4..cf4d75c628 100644
--- a/services/bintray/bintray.tester.js
+++ b/services/bintray/bintray.tester.js
@@ -5,7 +5,7 @@ const {
   isVPlusDottedVersionNClausesWithOptionalSuffix,
 } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('version')
   .get('/asciidoctor/maven/asciidoctorj.json')
diff --git a/services/bitbucket/bitbucket.tester.js b/services/bitbucket/bitbucket.tester.js
index b9c73f3d2c..3923a0de88 100644
--- a/services/bitbucket/bitbucket.tester.js
+++ b/services/bitbucket/bitbucket.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const {
   mockBitbucketCreds,
   mockBitbucketServerCreds,
diff --git a/services/bithound/bithound.tester.js b/services/bithound/bithound.tester.js
index 5a9057e0f5..2d7dd97d32 100644
--- a/services/bithound/bithound.tester.js
+++ b/services/bithound/bithound.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'bithound',
diff --git a/services/bitrise/bitrise.tester.js b/services/bitrise/bitrise.tester.js
index c978ab7077..24b357f82d 100644
--- a/services/bitrise/bitrise.tester.js
+++ b/services/bitrise/bitrise.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'bitrise',
diff --git a/services/bountysource/bountysource.tester.js b/services/bountysource/bountysource.tester.js
index 062aa4178c..9c4995974a 100644
--- a/services/bountysource/bountysource.tester.js
+++ b/services/bountysource/bountysource.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'bountysource',
diff --git a/services/bower/bower.tester.js b/services/bower/bower.tester.js
index 7cd7068217..ced65af40a 100644
--- a/services/bower/bower.tester.js
+++ b/services/bower/bower.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const isBowerPrereleaseVersion = Joi.string().regex(
diff --git a/services/bstats/bstats-players.tester.js b/services/bstats/bstats-players.tester.js
index 637a65332e..1337236ca4 100644
--- a/services/bstats/bstats-players.tester.js
+++ b/services/bstats/bstats-players.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Players')
   .get('/1.json')
diff --git a/services/bstats/bstats-servers.tester.js b/services/bstats/bstats-servers.tester.js
index 34fda5a91d..ee16c98760 100644
--- a/services/bstats/bstats-servers.tester.js
+++ b/services/bstats/bstats-servers.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Servers')
   .get('/1.json')
diff --git a/services/bugzilla/bugzilla.tester.js b/services/bugzilla/bugzilla.tester.js
index cc2664efc6..24b0a41eef 100644
--- a/services/bugzilla/bugzilla.tester.js
+++ b/services/bugzilla/bugzilla.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const bzBugStatus = Joi.equal(
   'unconfirmed',
diff --git a/services/buildkite/buildkite.tester.js b/services/buildkite/buildkite.tester.js
index 9393761bf1..95c7a3a392 100644
--- a/services/buildkite/buildkite.tester.js
+++ b/services/buildkite/buildkite.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 const { invalidJSON } = require('../response-fixtures')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'buildkite',
diff --git a/services/bundlephobia/bundlephobia.tester.js b/services/bundlephobia/bundlephobia.tester.js
index f4c8305d5e..f815dd06f1 100644
--- a/services/bundlephobia/bundlephobia.tester.js
+++ b/services/bundlephobia/bundlephobia.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { isFileSize } = require('../test-validators')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'bundlephobia',
diff --git a/services/cauditor/cauditor.tester.js b/services/cauditor/cauditor.tester.js
index 80e6a16e80..e971d175f8 100644
--- a/services/cauditor/cauditor.tester.js
+++ b/services/cauditor/cauditor.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'cauditor',
diff --git a/services/cdnjs/cdnjs.tester.js b/services/cdnjs/cdnjs.tester.js
index 6b4f5a833b..4618f25a5b 100644
--- a/services/cdnjs/cdnjs.tester.js
+++ b/services/cdnjs/cdnjs.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusTripleDottedVersion } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('cdnjs (valid)')
   .get('/jquery.json')
diff --git a/services/chocolatey/chocolatey.tester.js b/services/chocolatey/chocolatey.tester.js
index 064d8d7e6e..693fba22a8 100644
--- a/services/chocolatey/chocolatey.tester.js
+++ b/services/chocolatey/chocolatey.tester.js
@@ -11,7 +11,7 @@ const {
   nuGetV2VersionJsonFirstCharZero,
   nuGetV2VersionJsonFirstCharNotZero,
 } = require('../nuget-fixtures')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'chocolatey',
diff --git a/services/chrome-web-store/chrome-web-store.tester.js b/services/chrome-web-store/chrome-web-store.tester.js
index 833d8c9042..433441b6f7 100644
--- a/services/chrome-web-store/chrome-web-store.tester.js
+++ b/services/chrome-web-store/chrome-web-store.tester.js
@@ -6,7 +6,7 @@ const {
   isStarRating,
   isMetric,
 } = require('../test-validators')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'chrome-web-store',
diff --git a/services/cii-best-practices/cii-best-practices.tester.js b/services/cii-best-practices/cii-best-practices.tester.js
index 5c7a78aee2..df1e28f803 100644
--- a/services/cii-best-practices/cii-best-practices.tester.js
+++ b/services/cii-best-practices/cii-best-practices.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { withRegex } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('live: level known project')
   .get(`/level/1.json`)
diff --git a/services/circleci/circleci.tester.js b/services/circleci/circleci.tester.js
index 2cdb7d85dd..c27a34f5a5 100644
--- a/services/circleci/circleci.tester.js
+++ b/services/circleci/circleci.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'circleci',
diff --git a/services/clojars/clojars-downloads.tester.js b/services/clojars/clojars-downloads.tester.js
index f06f4174b2..06f79a4319 100644
--- a/services/clojars/clojars-downloads.tester.js
+++ b/services/clojars/clojars-downloads.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('clojars downloads (valid)')
   .get('/prismic.json')
diff --git a/services/clojars/clojars-version.tester.js b/services/clojars/clojars-version.tester.js
index 078acaf85b..dd6efccfe1 100644
--- a/services/clojars/clojars-version.tester.js
+++ b/services/clojars/clojars-version.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('clojars (valid)')
   .get('/prismic.json')
diff --git a/services/cocoapods/cocoapods-apps.tester.js b/services/cocoapods/cocoapods-apps.tester.js
index 43b36324a7..0a2be6618f 100644
--- a/services/cocoapods/cocoapods-apps.tester.js
+++ b/services/cocoapods/cocoapods-apps.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const t = (module.exports = new ServiceTester({
   id: 'CocoapodsApps',
   title: 'CocoapodsApps',
diff --git a/services/cocoapods/cocoapods-downloads.tester.js b/services/cocoapods/cocoapods-downloads.tester.js
index ef534d023d..92f008aa50 100644
--- a/services/cocoapods/cocoapods-downloads.tester.js
+++ b/services/cocoapods/cocoapods-downloads.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'CocoapodsDownloads',
diff --git a/services/cocoapods/cocoapods-license.tester.js b/services/cocoapods/cocoapods-license.tester.js
index 282b10d43d..bbc5a2375d 100644
--- a/services/cocoapods/cocoapods-license.tester.js
+++ b/services/cocoapods/cocoapods-license.tester.js
@@ -2,7 +2,7 @@
 
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('license (valid)')
   .get('/AFNetworking.json')
diff --git a/services/cocoapods/cocoapods-metrics.tester.js b/services/cocoapods/cocoapods-metrics.tester.js
index 5ea55a2504..5ced9e19e7 100644
--- a/services/cocoapods/cocoapods-metrics.tester.js
+++ b/services/cocoapods/cocoapods-metrics.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { invalidJSON } = require('../response-fixtures')
 const { isIntegerPercentage } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('doc percent (valid)')
   .get('/AFNetworking.json')
diff --git a/services/cocoapods/cocoapods-platform.tester.js b/services/cocoapods/cocoapods-platform.tester.js
index 9f3b9fed59..66e9fd16fa 100644
--- a/services/cocoapods/cocoapods-platform.tester.js
+++ b/services/cocoapods/cocoapods-platform.tester.js
@@ -7,7 +7,7 @@ const isPlatform = Joi.string().regex(
   /^(osx|ios|tvos|watchos)( \| (osx|ios|tvos|watchos))*$/
 )
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('platform (valid)')
   .get('/AFNetworking.json')
diff --git a/services/cocoapods/cocoapods-version.tester.js b/services/cocoapods/cocoapods-version.tester.js
index 547e7b4629..cc2423b064 100644
--- a/services/cocoapods/cocoapods-version.tester.js
+++ b/services/cocoapods/cocoapods-version.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('version (valid)')
   .get('/AFNetworking.json')
diff --git a/services/codacy/codacy-coverage.tester.js b/services/codacy/codacy-coverage.tester.js
index fc82b94bfb..0da5796bf8 100644
--- a/services/codacy/codacy-coverage.tester.js
+++ b/services/codacy/codacy-coverage.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isIntegerPercentage } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Coverage')
   .get('/59d607d0e311408885e418004068ea58.json')
diff --git a/services/codacy/codacy-grade.tester.js b/services/codacy/codacy-grade.tester.js
index 481fbf9523..55168e6b10 100644
--- a/services/codacy/codacy-grade.tester.js
+++ b/services/codacy/codacy-grade.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { codacyGrade } = require('./codacy-helpers')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Code quality')
   .get('/grade/e27821fb6289410b8f58338c7e0bc686.json')
diff --git a/services/codeclimate/codeclimate.tester.js b/services/codeclimate/codeclimate.tester.js
index 520fcfe587..38e7da77c0 100644
--- a/services/codeclimate/codeclimate.tester.js
+++ b/services/codeclimate/codeclimate.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isIntegerPercentage } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/codecov/codecov.tester.js b/services/codecov/codecov.tester.js
index 63f6f621b7..753d7340f7 100644
--- a/services/codecov/codecov.tester.js
+++ b/services/codecov/codecov.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isIntegerPercentage } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/codeship/codeship.tester.js b/services/codeship/codeship.tester.js
index efb0579187..ea2009cb28 100644
--- a/services/codeship/codeship.tester.js
+++ b/services/codeship/codeship.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'codeship',
diff --git a/services/codetally/codetally.tester.js b/services/codetally/codetally.tester.js
index d9f155b6d9..1128f3ce24 100644
--- a/services/codetally/codetally.tester.js
+++ b/services/codetally/codetally.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 // This test will extract the currency value from the
 // string value response from the server.
diff --git a/services/conda/conda.tester.js b/services/conda/conda.tester.js
index b508fbadc7..db304d6dcf 100644
--- a/services/conda/conda.tester.js
+++ b/services/conda/conda.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isVPlusTripleDottedVersion, isMetric } = require('../test-validators')
 
 const isCondaPlatform = Joi.string().regex(/^\w+-[\w\d]+( \| \w+-[\w\d]+)*$/)
diff --git a/services/continuousphp/continuousphp.tester.js b/services/continuousphp/continuousphp.tester.js
index 9b4aa85fd5..5eabd255e8 100644
--- a/services/continuousphp/continuousphp.tester.js
+++ b/services/continuousphp/continuousphp.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('build status on default branch')
   .get('/git-hub/doctrine/dbal.json')
diff --git a/services/cookbook/cookbook.tester.js b/services/cookbook/cookbook.tester.js
index 61a180d25f..fe8f619669 100644
--- a/services/cookbook/cookbook.tester.js
+++ b/services/cookbook/cookbook.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('version')
   .get('/chef-sugar.json')
diff --git a/services/coveralls/coveralls.tester.js b/services/coveralls/coveralls.tester.js
index d5f079a2e5..ab9f826476 100644
--- a/services/coveralls/coveralls.tester.js
+++ b/services/coveralls/coveralls.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { isIntegerPercentage } = require('../test-validators')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'coveralls',
diff --git a/services/coverity/coverity-on-demand.tester.js b/services/coverity/coverity-on-demand.tester.js
index eb25cc97c8..23e957ba71 100644
--- a/services/coverity/coverity-on-demand.tester.js
+++ b/services/coverity/coverity-on-demand.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'CoverityOnDemand',
diff --git a/services/coverity/coverity-scan.tester.js b/services/coverity/coverity-scan.tester.js
index f2ef041e39..a92ab3d643 100644
--- a/services/coverity/coverity-scan.tester.js
+++ b/services/coverity/coverity-scan.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'CoverityScan',
diff --git a/services/cpan/cpan-license.tester.js b/services/cpan/cpan-license.tester.js
index 95831ec71d..3dcd6b21cd 100644
--- a/services/cpan/cpan-license.tester.js
+++ b/services/cpan/cpan-license.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('license (valid)')
   .get('/Config-Augeas.json')
diff --git a/services/cpan/cpan-version.tester.js b/services/cpan/cpan-version.tester.js
index 4a5d5de5a9..4659f3271a 100644
--- a/services/cpan/cpan-version.tester.js
+++ b/services/cpan/cpan-version.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('version (valid)')
   .get('/Config-Augeas.json')
diff --git a/services/cran/cran.tester.js b/services/cran/cran.tester.js
index f7b6dfc262..decb966128 100644
--- a/services/cran/cran.tester.js
+++ b/services/cran/cran.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isVPlusTripleDottedVersion } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/crates/crates-downloads.tester.js b/services/crates/crates-downloads.tester.js
index e7419e917a..8cb1ddd50b 100644
--- a/services/crates/crates-downloads.tester.js
+++ b/services/crates/crates-downloads.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isMetric } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/crates/crates-license.tester.js b/services/crates/crates-license.tester.js
index 796372ff9f..e18a0929e4 100644
--- a/services/crates/crates-license.tester.js
+++ b/services/crates/crates-license.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'crates',
diff --git a/services/crates/crates-version.tester.js b/services/crates/crates-version.tester.js
index 0edb46e02e..c0813eaf29 100644
--- a/services/crates/crates-version.tester.js
+++ b/services/crates/crates-version.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isSemver } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/ctan/ctan.tester.js b/services/ctan/ctan.tester.js
index ffeb0e0a1a..b02be86e30 100644
--- a/services/ctan/ctan.tester.js
+++ b/services/ctan/ctan.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/date/date.tester.js b/services/date/date.tester.js
index ee9bf661bc..c9d9be07ad 100644
--- a/services/date/date.tester.js
+++ b/services/date/date.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isRelativeFormattedDate } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/david/david.tester.js b/services/david/david.tester.js
index 7c22cb9c18..4cdcc374ce 100644
--- a/services/david/david.tester.js
+++ b/services/david/david.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { invalidJSON } = require('../response-fixtures')
 
 const isDependencyStatus = Joi.string().valid(
diff --git a/services/debug/debug.tester.js b/services/debug/debug.tester.js
index f962b53b1f..db7f1d218c 100644
--- a/services/debug/debug.tester.js
+++ b/services/debug/debug.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('start time')
   .get('/starttime.json')
diff --git a/services/dependabot/dependabot.tester.js b/services/dependabot/dependabot.tester.js
index f2ae943761..59fc2c5f51 100644
--- a/services/dependabot/dependabot.tester.js
+++ b/services/dependabot/dependabot.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isIntegerPercentage } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('semver stability (valid)')
   .get('/bundler/puma.json')
diff --git a/services/depfu/depfu.tester.js b/services/depfu/depfu.tester.js
index 4778374ad2..c72b117efc 100644
--- a/services/depfu/depfu.tester.js
+++ b/services/depfu/depfu.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const isDependencyStatus = Joi.string().valid(
   'insecure',
diff --git a/services/discord/discord.tester.js b/services/discord/discord.tester.js
index a3ed950446..6d9a484c80 100644
--- a/services/discord/discord.tester.js
+++ b/services/discord/discord.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('gets status for Reactiflux')
   .get('/102860784329052160.json?style=_shields_test')
diff --git a/services/discourse/discourse.tester.js b/services/discourse/discourse.tester.js
index bcb08c2a64..74857a6778 100644
--- a/services/discourse/discourse.tester.js
+++ b/services/discourse/discourse.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'discourse',
diff --git a/services/dockbit/dockbit.tester.js b/services/dockbit/dockbit.tester.js
index c7474386a7..3c1f69a910 100644
--- a/services/dockbit/dockbit.tester.js
+++ b/services/dockbit/dockbit.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'dockbit',
diff --git a/services/docker/docker-automated.tester.js b/services/docker/docker-automated.tester.js
index 0242e147a9..a62f2cb85b 100644
--- a/services/docker/docker-automated.tester.js
+++ b/services/docker/docker-automated.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { dockerBlue } = require('./docker-helpers')
 const isAutomatedBuildStatus = Joi.string().valid('automated', 'manual')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('docker automated build (valid, library)')
   .get('/_/ubuntu.json')
diff --git a/services/docker/docker-build.tester.js b/services/docker/docker-build.tester.js
index ec2146128f..670d4217d7 100644
--- a/services/docker/docker-build.tester.js
+++ b/services/docker/docker-build.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { dockerBlue } = require('./docker-helpers')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('docker build status (valid, user)')
   .get('/jrottenberg/ffmpeg.json')
diff --git a/services/docker/docker-pulls.tester.js b/services/docker/docker-pulls.tester.js
index 944b8b5322..381942a5e8 100644
--- a/services/docker/docker-pulls.tester.js
+++ b/services/docker/docker-pulls.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { dockerBlue } = require('./docker-helpers')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('docker pulls (valid, library)')
   .get('/_/ubuntu.json?style=_shields_test')
diff --git a/services/docker/docker-stars.tester.js b/services/docker/docker-stars.tester.js
index eb1ff4bf64..61c97b908a 100644
--- a/services/docker/docker-stars.tester.js
+++ b/services/docker/docker-stars.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 const { dockerBlue } = require('./docker-helpers')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('docker stars (valid, library)')
   .get('/_/ubuntu.json?style=_shields_test')
diff --git a/services/dotnetstatus/dotnetstatus.tester.js b/services/dotnetstatus/dotnetstatus.tester.js
index 000988ae24..745770954f 100644
--- a/services/dotnetstatus/dotnetstatus.tester.js
+++ b/services/dotnetstatus/dotnetstatus.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'dotnetstatus',
diff --git a/services/dub/dub-download.tester.js b/services/dub/dub-download.tester.js
index bf8a5862c1..aa27f8a833 100644
--- a/services/dub/dub-download.tester.js
+++ b/services/dub/dub-download.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
 const isDownloadsColor = Joi.equal(
diff --git a/services/dub/dub-license.tester.js b/services/dub/dub-license.tester.js
index bc0a266c92..357b58b795 100644
--- a/services/dub/dub-license.tester.js
+++ b/services/dub/dub-license.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('license (valid)')
   .get('/vibe-d.json')
diff --git a/services/dub/dub-version.tester.js b/services/dub/dub-version.tester.js
index 5a73116939..e8e21d56e6 100644
--- a/services/dub/dub-version.tester.js
+++ b/services/dub/dub-version.tester.js
@@ -5,7 +5,7 @@ const {
   isVPlusDottedVersionNClausesWithOptionalSuffix,
 } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('version (valid)')
   .get('/vibe-d.json?style=_shields_test')
diff --git a/services/dynamic/dynamic-json.tester.js b/services/dynamic/dynamic-json.tester.js
index f433fb70d1..1f454ee883 100644
--- a/services/dynamic/dynamic-json.tester.js
+++ b/services/dynamic/dynamic-json.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { expect } = require('chai')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('No URL specified')
   .get('.json?query=$.name&label=Package Name&style=_shields_test')
diff --git a/services/dynamic/dynamic-xml.tester.js b/services/dynamic/dynamic-xml.tester.js
index f5738fa1bf..d1f18def87 100644
--- a/services/dynamic/dynamic-xml.tester.js
+++ b/services/dynamic/dynamic-xml.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { expect } = require('chai')
 const { isSemver } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('No URL specified')
   .get('.json?query=//name&label=Package Name&style=_shields_test')
diff --git a/services/dynamic/dynamic-yaml.tester.js b/services/dynamic/dynamic-yaml.tester.js
index 9efd4f4414..7a82cfc788 100644
--- a/services/dynamic/dynamic-yaml.tester.js
+++ b/services/dynamic/dynamic-yaml.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('No URL specified')
   .get('.json?query=$.name&label=Package Name&style=_shields_test')
diff --git a/services/eclipse-marketplace/eclipse-marketplace-downloads.tester.js b/services/eclipse-marketplace/eclipse-marketplace-downloads.tester.js
index c06bfec0a1..d2f6724150 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-downloads.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-downloads.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/eclipse-marketplace/eclipse-marketplace-favorites.tester.js b/services/eclipse-marketplace/eclipse-marketplace-favorites.tester.js
index 658d3feac9..392a9262c5 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-favorites.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-favorites.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('favorites count')
   .get('/notepad4e.json')
diff --git a/services/eclipse-marketplace/eclipse-marketplace-license.tester.js b/services/eclipse-marketplace/eclipse-marketplace-license.tester.js
index b143a9777a..92bf92d827 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-license.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-license.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('license')
   .get('/notepad4e.json')
diff --git a/services/eclipse-marketplace/eclipse-marketplace-update.tester.js b/services/eclipse-marketplace/eclipse-marketplace-update.tester.js
index 0f7b20ccee..ddc6cd598f 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-update.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-update.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFormattedDate } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('last update date')
   .get('/notepad4e.json')
diff --git a/services/eclipse-marketplace/eclipse-marketplace-version.tester.js b/services/eclipse-marketplace/eclipse-marketplace-version.tester.js
index 14ac85b100..bc8bb2c301 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-version.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-version.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('marketplace version')
   .get('/notepad4e.json')
diff --git a/services/elm-package/elm-package.tester.js b/services/elm-package/elm-package.tester.js
index d378ba4b0f..a0f2b44c14 100644
--- a/services/elm-package/elm-package.tester.js
+++ b/services/elm-package/elm-package.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isSemver } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('gets the package version of elm/core')
   .get('/elm/core.json')
diff --git a/services/endpoint/endpoint.tester.js b/services/endpoint/endpoint.tester.js
index 6de816adc4..2d8fd9a4c2 100644
--- a/services/endpoint/endpoint.tester.js
+++ b/services/endpoint/endpoint.tester.js
@@ -3,7 +3,7 @@
 const { expect } = require('chai')
 const { getShieldsIcon } = require('../../lib/logos')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Valid schema (mocked)')
   .get('.json?url=https://example.com/badge')
diff --git a/services/f-droid/f-droid.tester.js b/services/f-droid/f-droid.tester.js
index 5ce1831cfa..b636e4ca4d 100644
--- a/services/f-droid/f-droid.tester.js
+++ b/services/f-droid/f-droid.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/flip/flip.tester.js b/services/flip/flip.tester.js
index 59b000b41b..c52365b4f1 100644
--- a/services/flip/flip.tester.js
+++ b/services/flip/flip.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('First request')
   .get('.json')
diff --git a/services/gem/gem-downloads.tester.js b/services/gem/gem-downloads.tester.js
index f2d4e96805..7842477d3e 100644
--- a/services/gem/gem-downloads.tester.js
+++ b/services/gem/gem-downloads.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('total downloads (valid)')
   .get('/dt/rails.json')
diff --git a/services/gem/gem-owner.tester.js b/services/gem/gem-owner.tester.js
index 741dbfe129..34b85040c4 100644
--- a/services/gem/gem-owner.tester.js
+++ b/services/gem/gem-owner.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('users (valid)')
   .get('/raphink.json')
diff --git a/services/gem/gem-rank.tester.js b/services/gem/gem-rank.tester.js
index 033841f4f0..22f3b61d12 100644
--- a/services/gem/gem-rank.tester.js
+++ b/services/gem/gem-rank.tester.js
@@ -7,7 +7,7 @@ const isOrdinalNumberDaily = Joi.string().regex(
   /^[1-9][0-9]*(ᵗʰ|ˢᵗ|ⁿᵈ|ʳᵈ) daily$/
 )
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('total rank (valid)')
   .get('/rt/rspec-puppet-facts.json')
diff --git a/services/gem/gem-version.tester.js b/services/gem/gem-version.tester.js
index f4a6ce93b1..9d650a413d 100644
--- a/services/gem/gem-version.tester.js
+++ b/services/gem/gem-version.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('version (valid)')
   .get('/formatador.json')
diff --git a/services/gemnasium/gemnasium.tester.js b/services/gemnasium/gemnasium.tester.js
index d2954c05bc..6235763574 100644
--- a/services/gemnasium/gemnasium.tester.js
+++ b/services/gemnasium/gemnasium.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'gemnasium',
diff --git a/services/github/github-commit-activity.tester.js b/services/github/github-commit-activity.tester.js
index 105912d7b7..2c2a909b36 100644
--- a/services/github/github-commit-activity.tester.js
+++ b/services/github/github-commit-activity.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetricOverTimePeriod } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('commit activity (1 year)')
   .get('/y/eslint/eslint.json')
diff --git a/services/github/github-commit-status.tester.js b/services/github/github-commit-status.tester.js
index 22100c4813..11f6dd3166 100644
--- a/services/github/github-commit-status.tester.js
+++ b/services/github/github-commit-status.tester.js
@@ -2,7 +2,7 @@
 
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('commit status - commit in branch')
   .get(
diff --git a/services/github/github-commits-since.tester.js b/services/github/github-commits-since.tester.js
index c9ddc8194d..1bcd596a52 100644
--- a/services/github/github-commits-since.tester.js
+++ b/services/github/github-commits-since.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Commits since')
   .get(
diff --git a/services/github/github-contributors.tester.js b/services/github/github-contributors.tester.js
index b9d30d02cc..e946f28e33 100644
--- a/services/github/github-contributors.tester.js
+++ b/services/github/github-contributors.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 const { isMetric } = require('../test-validators')
 
 t.create('Contributors')
diff --git a/services/github/github-downloads.tester.js b/services/github/github-downloads.tester.js
index d1181384e2..8b2e6a461e 100644
--- a/services/github/github-downloads.tester.js
+++ b/services/github/github-downloads.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Downloads all releases')
   .get('/downloads/photonstorm/phaser/total.json')
diff --git a/services/github/github-followers.tester.js b/services/github/github-followers.tester.js
index 6b4f85e8d2..087847b36d 100644
--- a/services/github/github-followers.tester.js
+++ b/services/github/github-followers.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Followers')
   .get('/webcaetano.json')
diff --git a/services/github/github-forks.tester.js b/services/github/github-forks.tester.js
index 6dfbae5a2e..53d9950112 100644
--- a/services/github/github-forks.tester.js
+++ b/services/github/github-forks.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Forks')
   .get('/badges/shields.json')
diff --git a/services/github/github-issue-detail.tester.js b/services/github/github-issue-detail.tester.js
index 8ac4ce19cb..a6fb65efb2 100644
--- a/services/github/github-issue-detail.tester.js
+++ b/services/github/github-issue-detail.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFormattedDate } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('github issue state')
   .get('/s/badges/shields/979.json')
diff --git a/services/github/github-issues.tester.js b/services/github/github-issues.tester.js
index 725dbc61f0..fca450d751 100644
--- a/services/github/github-issues.tester.js
+++ b/services/github/github-issues.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric, isMetricOpenIssues } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('GitHub closed pull requests')
   .get('/issues-pr-closed/badges/shields.json')
diff --git a/services/github/github-languages.tester.js b/services/github/github-languages.tester.js
index ffbc8624c2..9dbc142ed0 100644
--- a/services/github/github-languages.tester.js
+++ b/services/github/github-languages.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isFileSize } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/github/github-last-commit.tester.js b/services/github/github-last-commit.tester.js
index e58084fff8..4018b0eb74 100644
--- a/services/github/github-last-commit.tester.js
+++ b/services/github/github-last-commit.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFormattedDate } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('last commit (recent)')
   .get('/eslint/eslint.json')
diff --git a/services/github/github-license.tester.js b/services/github/github-license.tester.js
index d7e6b1c8fc..6d5fcd4a39 100644
--- a/services/github/github-license.tester.js
+++ b/services/github/github-license.tester.js
@@ -7,7 +7,7 @@ const permissiveLicenseColor = licenseToColor('MIT')
 const copyleftLicenseColor = licenseToColor('GPL-3.0')
 const unknownLicenseColor = licenseToColor()
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Public domain license')
   .get('/github/gitignore.json?style=_shields_test')
diff --git a/services/github/github-manifest.tester.js b/services/github/github-manifest.tester.js
index 43afb4eecb..b7a4253bdc 100644
--- a/services/github/github-manifest.tester.js
+++ b/services/github/github-manifest.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/github/github-package-json.tester.js b/services/github/github-package-json.tester.js
index 3d3742ad22..f187eee7ea 100644
--- a/services/github/github-package-json.tester.js
+++ b/services/github/github-package-json.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isSemver } = require('../test-validators')
 const { semverRange } = require('../validators')
 
diff --git a/services/github/github-pull-request-check-state.tester.js b/services/github/github-pull-request-check-state.tester.js
index 64ba8e2159..a7df0b5766 100644
--- a/services/github/github-pull-request-check-state.tester.js
+++ b/services/github/github-pull-request-check-state.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('github pull request check state')
   .get('/s/pulls/badges/shields/1110.json')
diff --git a/services/github/github-release.tester.js b/services/github/github-release.tester.js
index 30ec7a04ca..7c8f61d795 100644
--- a/services/github/github-release.tester.js
+++ b/services/github/github-release.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFormattedDate } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Release')
   .get('/release/photonstorm/phaser.json')
diff --git a/services/github/github-repo-size.tester.js b/services/github/github-repo-size.tester.js
index 0a0e209cb4..d527e599b5 100644
--- a/services/github/github-repo-size.tester.js
+++ b/services/github/github-repo-size.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFileSize } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('repository size')
   .get('/badges/shields.json')
diff --git a/services/github/github-search.tester.js b/services/github/github-search.tester.js
index 238b25d7fe..06437f5a79 100644
--- a/services/github/github-search.tester.js
+++ b/services/github/github-search.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('hit counter')
   .get('/badges/shields/async%20handle.json')
diff --git a/services/github/github-size.tester.js b/services/github/github-size.tester.js
index 9899aeebca..e1163e9b35 100644
--- a/services/github/github-size.tester.js
+++ b/services/github/github-size.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFileSize } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('File size')
   .get('/webcaetano/craft/build/phaser-craft.min.js.json')
diff --git a/services/github/github-stars.tester.js b/services/github/github-stars.tester.js
index 6d501a65c4..2727438331 100644
--- a/services/github/github-stars.tester.js
+++ b/services/github/github-stars.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Stars')
   .get('/badges/shields.json')
diff --git a/services/github/github-tag.tester.js b/services/github/github-tag.tester.js
index 4a2bd9f5cb..0d8946fe44 100644
--- a/services/github/github-tag.tester.js
+++ b/services/github/github-tag.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Tag')
   .get('/tag/photonstorm/phaser.json')
diff --git a/services/github/github-watchers.tester.js b/services/github/github-watchers.tester.js
index 3fae7e040a..f3eac4db82 100644
--- a/services/github/github-watchers.tester.js
+++ b/services/github/github-watchers.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Watchers')
   .get('/badges/shields.json')
diff --git a/services/gitlab/gitlab-pipeline-status.tester.js b/services/gitlab/gitlab-pipeline-status.tester.js
index b2eb24310d..5f7e8bbecc 100644
--- a/services/gitlab/gitlab-pipeline-status.tester.js
+++ b/services/gitlab/gitlab-pipeline-status.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Pipeline status')
   .get('/gitlab-org/gitlab-ce.json')
diff --git a/services/gitter/gitter.tester.js b/services/gitter/gitter.tester.js
index f5e7ecebae..f8671b8fc7 100644
--- a/services/gitter/gitter.tester.js
+++ b/services/gitter/gitter.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('on gitter')
   .get('/nwjs/nw.js.json')
diff --git a/services/gratipay/gratipay.tester.js b/services/gratipay/gratipay.tester.js
index dbf2522d7e..6d3accfc1c 100644
--- a/services/gratipay/gratipay.tester.js
+++ b/services/gratipay/gratipay.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'gratipay',
diff --git a/services/hackage/hackage-deps.tester.js b/services/hackage/hackage-deps.tester.js
index c8b2aa03f2..432b8f9e00 100644
--- a/services/hackage/hackage-deps.tester.js
+++ b/services/hackage/hackage-deps.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('hackage deps (valid)')
   .get('/lens.json')
diff --git a/services/hackage/hackage-version.tester.js b/services/hackage/hackage-version.tester.js
index cb6406624b..2f897fd312 100644
--- a/services/hackage/hackage-version.tester.js
+++ b/services/hackage/hackage-version.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('hackage version (valid)')
   .get('/lens.json')
diff --git a/services/hexpm/hexpm.tester.js b/services/hexpm/hexpm.tester.js
index 8fd479f22e..e9ad5734ea 100644
--- a/services/hexpm/hexpm.tester.js
+++ b/services/hexpm/hexpm.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
 const isHexpmVersion = Joi.string().regex(/^v\d+.\d+.?\d?$/)
diff --git a/services/homebrew/homebrew.tester.js b/services/homebrew/homebrew.tester.js
index 87781afa61..f8be425c32 100644
--- a/services/homebrew/homebrew.tester.js
+++ b/services/homebrew/homebrew.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isVPlusTripleDottedVersion } = require('../test-validators')
 const { invalidJSON } = require('../response-fixtures')
 
diff --git a/services/imagelayers/imagelayers.tester.js b/services/imagelayers/imagelayers.tester.js
index 51bf85fd5d..e8ce26803b 100644
--- a/services/imagelayers/imagelayers.tester.js
+++ b/services/imagelayers/imagelayers.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'imagelayers',
diff --git a/services/index.js b/services/index.js
index 5d1a862733..14d418b6df 100644
--- a/services/index.js
+++ b/services/index.js
@@ -1,11 +1,7 @@
 'use strict'
 
 const base = require('../core/base-service')
-const createServiceTester = require('../core/service-test-runner/create-service-tester')
-const ServiceTester = require('../core/service-test-runner/service-tester')
 
 module.exports = {
   ...base,
-  createServiceTester,
-  ServiceTester,
 }
diff --git a/services/issuestats/issuestats.tester.js b/services/issuestats/issuestats.tester.js
index 8eb3f8cb7a..ea8d5a4567 100644
--- a/services/issuestats/issuestats.tester.js
+++ b/services/issuestats/issuestats.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = new ServiceTester({ id: 'issuestats', title: 'Issue Stats' })
 module.exports = t
diff --git a/services/itunes/itunes.tester.js b/services/itunes/itunes.tester.js
index d5da284fae..0888f8a8ab 100644
--- a/services/itunes/itunes.tester.js
+++ b/services/itunes/itunes.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('iTunes version (valid)')
   .get('/324684580.json')
diff --git a/services/jenkins/jenkins-coverage.tester.js b/services/jenkins/jenkins-coverage.tester.js
index eb10f8c3fb..9f3926afd7 100644
--- a/services/jenkins/jenkins-coverage.tester.js
+++ b/services/jenkins/jenkins-coverage.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isIntegerPercentage } = require('../test-validators')
 
 const t = new ServiceTester({
diff --git a/services/jenkins/jenkins-plugin-installs.tester.js b/services/jenkins/jenkins-plugin-installs.tester.js
index bb62c497ea..66c355ef3c 100644
--- a/services/jenkins/jenkins-plugin-installs.tester.js
+++ b/services/jenkins/jenkins-plugin-installs.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 // total installs
 
diff --git a/services/jenkins/jenkins-plugin-version.tester.js b/services/jenkins/jenkins-plugin-version.tester.js
index 2534f5c6b0..fb35de9821 100644
--- a/services/jenkins/jenkins-plugin-version.tester.js
+++ b/services/jenkins/jenkins-plugin-version.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = new ServiceTester({
   id: 'jenkins-plugin',
diff --git a/services/jetbrains/jetbrains.tester.js b/services/jetbrains/jetbrains.tester.js
index c7bb86316e..a0fc53dd74 100644
--- a/services/jetbrains/jetbrains.tester.js
+++ b/services/jetbrains/jetbrains.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isMetric, isVPlusDottedVersionNClauses } = require('../test-validators')
 
 const t = new ServiceTester({ id: 'jetbrains', title: 'JetBrains' })
diff --git a/services/jira/jira-issue.tester.js b/services/jira/jira-issue.tester.js
index b8fb77f058..44d4c84c08 100644
--- a/services/jira/jira-issue.tester.js
+++ b/services/jira/jira-issue.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 const { mockJiraCreds, restore, user, pass } = require('./jira-test-helpers')
 
 t.create('live: unknown issue')
diff --git a/services/jira/jira-sprint.tester.js b/services/jira/jira-sprint.tester.js
index 595d51b937..6bab3b7c85 100644
--- a/services/jira/jira-sprint.tester.js
+++ b/services/jira/jira-sprint.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 const { isIntegerPercentage } = require('../test-validators')
 const { mockJiraCreds, restore, user, pass } = require('./jira-test-helpers')
 
diff --git a/services/jitpack/jitpack.tester.js b/services/jitpack/jitpack.tester.js
index cbca26fde1..419d3b8649 100644
--- a/services/jitpack/jitpack.tester.js
+++ b/services/jitpack/jitpack.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 // Github allows versions with chars, etc.
 const isAnyV = Joi.string().regex(/^v.+$/)
diff --git a/services/leanpub/leanpub-book-summary.tester.js b/services/leanpub/leanpub-book-summary.tester.js
index a712a54891..cc18cf5a1b 100644
--- a/services/leanpub/leanpub-book-summary.tester.js
+++ b/services/leanpub/leanpub-book-summary.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 
 const knownValidBook = 'juice-shop'
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('known book pages')
   .get(`/pages/${knownValidBook}.json`)
diff --git a/services/lgtm/lgtm.tester.js b/services/lgtm/lgtm.tester.js
index 9644d3dfa1..7dafca2da6 100644
--- a/services/lgtm/lgtm.tester.js
+++ b/services/lgtm/lgtm.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const t = new ServiceTester({ id: 'lgtm', title: 'LGTM' })
 module.exports = t
 
diff --git a/services/liberapay/liberapay-gives.tester.js b/services/liberapay/liberapay-gives.tester.js
index 67f50f86e0..c7c5363cb1 100644
--- a/services/liberapay/liberapay-gives.tester.js
+++ b/services/liberapay/liberapay-gives.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { isCurrencyOverTime } = require('./liberapay-base')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Giving (valid)')
   .get('/Changaco.json')
diff --git a/services/liberapay/liberapay-goal.tester.js b/services/liberapay/liberapay-goal.tester.js
index b9453717bf..2b44734f00 100644
--- a/services/liberapay/liberapay-goal.tester.js
+++ b/services/liberapay/liberapay-goal.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { isIntegerPercentage } = require('../test-validators')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Goal Progress (valid)')
   .get('/Liberapay.json')
diff --git a/services/liberapay/liberapay-patrons.tester.js b/services/liberapay/liberapay-patrons.tester.js
index 211645b2bf..6bd0b598d7 100644
--- a/services/liberapay/liberapay-patrons.tester.js
+++ b/services/liberapay/liberapay-patrons.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Patrons (valid)')
   .get('/Liberapay.json')
diff --git a/services/liberapay/liberapay-receives.tester.js b/services/liberapay/liberapay-receives.tester.js
index bbf55f5fbc..eb8977988a 100644
--- a/services/liberapay/liberapay-receives.tester.js
+++ b/services/liberapay/liberapay-receives.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { isCurrencyOverTime } = require('./liberapay-base')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Receiving (valid)')
   .get('/Changaco.json')
diff --git a/services/librariesio/librariesio-dependencies.tester.js b/services/librariesio/librariesio-dependencies.tester.js
index ffef6867c4..2de77af932 100644
--- a/services/librariesio/librariesio-dependencies.tester.js
+++ b/services/librariesio/librariesio-dependencies.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isDependencyState } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('dependencies for releases')
   .get('/release/hex/phoenix/1.0.3.json')
diff --git a/services/librariesio/librariesio-dependent-repos.tester.js b/services/librariesio/librariesio-dependent-repos.tester.js
index bf6f849775..26e703948d 100644
--- a/services/librariesio/librariesio-dependent-repos.tester.js
+++ b/services/librariesio/librariesio-dependent-repos.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('dependent repo count')
   .get('/npm/got.json')
diff --git a/services/librariesio/librariesio-dependents.tester.js b/services/librariesio/librariesio-dependents.tester.js
index dd2ec520d9..e1f283f9a4 100644
--- a/services/librariesio/librariesio-dependents.tester.js
+++ b/services/librariesio/librariesio-dependents.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('dependent count')
   .get('/npm/got.json')
diff --git a/services/librariesio/librariesio-sourcerank.tester.js b/services/librariesio/librariesio-sourcerank.tester.js
index 80c8864f20..9d870e7ead 100644
--- a/services/librariesio/librariesio-sourcerank.tester.js
+++ b/services/librariesio/librariesio-sourcerank.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { anyInteger } = require('../validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('sourcerank')
   .get('/npm/got.json')
diff --git a/services/libscore/libscore.tester.js b/services/libscore/libscore.tester.js
index 8c440914e0..e43e341c0f 100644
--- a/services/libscore/libscore.tester.js
+++ b/services/libscore/libscore.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = new ServiceTester({ id: 'libscore', title: 'libscore' })
 module.exports = t
diff --git a/services/luarocks/luarocks.tester.js b/services/luarocks/luarocks.tester.js
index 94ce1874e4..00c083ba69 100644
--- a/services/luarocks/luarocks.tester.js
+++ b/services/luarocks/luarocks.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = new ServiceTester({ id: 'luarocks', title: 'LuaRocks' })
 module.exports = t
diff --git a/services/magnumci/magnumci.tester.js b/services/magnumci/magnumci.tester.js
index bd44cf89f2..aba33b6397 100644
--- a/services/magnumci/magnumci.tester.js
+++ b/services/magnumci/magnumci.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = new ServiceTester({ id: 'magnumci', title: 'Magnum CI' })
 module.exports = t
diff --git a/services/maintenance/maintenance.tester.js b/services/maintenance/maintenance.tester.js
index d10bed8df3..9c879520ac 100644
--- a/services/maintenance/maintenance.tester.js
+++ b/services/maintenance/maintenance.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = new ServiceTester({ id: 'maintenance', title: 'Maintenance' })
 module.exports = t
diff --git a/services/matrix/matrix.tester.js b/services/matrix/matrix.tester.js
index 9f5fb54c1b..1ff18ed437 100644
--- a/services/matrix/matrix.tester.js
+++ b/services/matrix/matrix.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('get room state as guest')
   .get('/ALIAS:DUMMY.dumb.json?style=_shields_test')
diff --git a/services/maven-central/maven-central.tester.js b/services/maven-central/maven-central.tester.js
index 7f089c7c48..58b4502787 100644
--- a/services/maven-central/maven-central.tester.js
+++ b/services/maven-central/maven-central.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = new ServiceTester({ id: 'maven-central', title: 'Maven Central' })
 module.exports = t
diff --git a/services/maven-metadata/maven-metadata.tester.js b/services/maven-metadata/maven-metadata.tester.js
index b4e2b4aa64..fcf388672f 100644
--- a/services/maven-metadata/maven-metadata.tester.js
+++ b/services/maven-metadata/maven-metadata.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/microbadger/microbadger.tester.js b/services/microbadger/microbadger.tester.js
index 242135572c..a07a37eeaf 100644
--- a/services/microbadger/microbadger.tester.js
+++ b/services/microbadger/microbadger.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isFileSize } = require('../test-validators')
 const { invalidJSON } = require('../response-fixtures')
 
diff --git a/services/myget/myget.tester.js b/services/myget/myget.tester.js
index 87606a7602..ae88fc7be0 100644
--- a/services/myget/myget.tester.js
+++ b/services/myget/myget.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const {
   isMetric,
   isVPlusDottedVersionNClausesWithOptionalSuffix,
diff --git a/services/nexus/nexus.tester.js b/services/nexus/nexus.tester.js
index bfdd1f8e13..2383735e93 100644
--- a/services/nexus/nexus.tester.js
+++ b/services/nexus/nexus.tester.js
@@ -5,7 +5,7 @@ const sinon = require('sinon')
 const {
   isVPlusDottedVersionNClausesWithOptionalSuffix: isVersion,
 } = require('../test-validators')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 const serverSecrets = require('../../lib/server-secrets')
 
 const user = 'admin'
diff --git a/services/node/node.tester.js b/services/node/node.tester.js
index f9baa4ff8e..0796c0d9d6 100644
--- a/services/node/node.tester.js
+++ b/services/node/node.tester.js
@@ -4,7 +4,7 @@ const { expect } = require('chai')
 const Joi = require('joi')
 const { Range } = require('semver')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 function expectSemverRange(value) {
   expect(() => new Range(value)).not.to.throw()
diff --git a/services/npm/npm-collaborators.tester.js b/services/npm/npm-collaborators.tester.js
index f005d87ce5..3c4c4cbc0c 100644
--- a/services/npm/npm-collaborators.tester.js
+++ b/services/npm/npm-collaborators.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('gets the contributor count')
   .get('/prettier.json')
diff --git a/services/npm/npm-dependency-version.tester.js b/services/npm/npm-dependency-version.tester.js
index 9fe860b1cd..61ed87a6dd 100644
--- a/services/npm/npm-dependency-version.tester.js
+++ b/services/npm/npm-dependency-version.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { semverRange } = require('../validators')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('gets the peer dependency version')
   .get('/react-boxplot/peer/react.json')
diff --git a/services/npm/npm-downloads.tester.js b/services/npm/npm-downloads.tester.js
index 184e263863..0d2b27858c 100644
--- a/services/npm/npm-downloads.tester.js
+++ b/services/npm/npm-downloads.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isMetric } = require('../test-validators')
 
 const t = new ServiceTester({
diff --git a/services/npm/npm-license.tester.js b/services/npm/npm-license.tester.js
index cc6f1e8672..20677c6ac5 100644
--- a/services/npm/npm-license.tester.js
+++ b/services/npm/npm-license.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('gets the license of express')
   .get('/express.json')
diff --git a/services/npm/npm-type-definitions.tester.js b/services/npm/npm-type-definitions.tester.js
index 47e39e25a8..747f16cb5b 100644
--- a/services/npm/npm-type-definitions.tester.js
+++ b/services/npm/npm-type-definitions.tester.js
@@ -6,7 +6,7 @@ const isTypeDefinition = Joi.string().regex(
   /^((Flow|TypeScript)|(Flow \| TypeScript))$/
 )
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('types (from dev dependencies + files)')
   .get('/chalk.json')
diff --git a/services/npm/npm-version.tester.js b/services/npm/npm-version.tester.js
index f87f41f9bc..e5572e9d9f 100644
--- a/services/npm/npm-version.tester.js
+++ b/services/npm/npm-version.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isSemver } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('gets the package version of left-pad')
   .get('/left-pad.json')
diff --git a/services/nsp/nsp.tester.js b/services/nsp/nsp.tester.js
index 5e6c38d40c..b2a66903ed 100644
--- a/services/nsp/nsp.tester.js
+++ b/services/nsp/nsp.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'nsp',
diff --git a/services/nuget/nuget.tester.js b/services/nuget/nuget.tester.js
index dc721a1c16..8dc07a4812 100644
--- a/services/nuget/nuget.tester.js
+++ b/services/nuget/nuget.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const {
   isMetric,
   isVPlusDottedVersionNClauses,
diff --git a/services/opencollective/opencollective-all.tester.js b/services/opencollective/opencollective-all.tester.js
index 05282b0a7b..b7648f1dd9 100644
--- a/services/opencollective/opencollective-all.tester.js
+++ b/services/opencollective/opencollective-all.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('renders correctly')
   .get('/shields.json?style=_shields_test')
diff --git a/services/opencollective/opencollective-backers.tester.js b/services/opencollective/opencollective-backers.tester.js
index 541a595fd7..c6f16185ea 100644
--- a/services/opencollective/opencollective-backers.tester.js
+++ b/services/opencollective/opencollective-backers.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('renders correctly')
   .get('/shields.json?style=_shields_test')
diff --git a/services/opencollective/opencollective-by-tier.tester.js b/services/opencollective/opencollective-by-tier.tester.js
index df7ae78a7d..e7f44cb05c 100644
--- a/services/opencollective/opencollective-by-tier.tester.js
+++ b/services/opencollective/opencollective-by-tier.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('renders correctly')
   .get('/shields/2988.json')
diff --git a/services/opencollective/opencollective-sponsors.tester.js b/services/opencollective/opencollective-sponsors.tester.js
index 9d8ef2063d..1a39cf358f 100644
--- a/services/opencollective/opencollective-sponsors.tester.js
+++ b/services/opencollective/opencollective-sponsors.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('renders correctly')
   .get('/shields.json')
diff --git a/services/osslifecycle/osslifecycle.tester.js b/services/osslifecycle/osslifecycle.tester.js
index dfd730a541..56a0f1722f 100644
--- a/services/osslifecycle/osslifecycle.tester.js
+++ b/services/osslifecycle/osslifecycle.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'osslifecycle',
diff --git a/services/packagecontrol/packagecontrol.tester.js b/services/packagecontrol/packagecontrol.tester.js
index 0701e4a6fe..cdfdfb4fa9 100644
--- a/services/packagecontrol/packagecontrol.tester.js
+++ b/services/packagecontrol/packagecontrol.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/packagist/packagist.tester.js b/services/packagist/packagist.tester.js
index ce2aa3f2d2..f42abbae67 100644
--- a/services/packagist/packagist.tester.js
+++ b/services/packagist/packagist.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const {
   isComposerVersion,
   isMetric,
diff --git a/services/php-eye/php-eye-hhvm.tester.js b/services/php-eye/php-eye-hhvm.tester.js
index df8cdfe156..1f5e6437d2 100644
--- a/services/php-eye/php-eye-hhvm.tester.js
+++ b/services/php-eye/php-eye-hhvm.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { invalidJSON } = require('../response-fixtures')
 
 const isAllowedStatus = Joi.string().regex(
diff --git a/services/php-eye/php-eye-php-version.tester.js b/services/php-eye/php-eye-php-version.tester.js
index fbe25a6a28..192a617265 100644
--- a/services/php-eye/php-eye-php-version.tester.js
+++ b/services/php-eye/php-eye-php-version.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isPhpVersionReduction } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/powershellgallery/powershellgallery.tester.js b/services/powershellgallery/powershellgallery.tester.js
index 57bca78116..5f5e3bbd44 100644
--- a/services/powershellgallery/powershellgallery.tester.js
+++ b/services/powershellgallery/powershellgallery.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const {
   isMetric,
   isVPlusDottedVersionNClauses,
diff --git a/services/pub/pub.tester.js b/services/pub/pub.tester.js
index 0d9deac3ed..68bd219678 100644
--- a/services/pub/pub.tester.js
+++ b/services/pub/pub.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isVPlusTripleDottedVersion } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({ id: 'pub', title: 'Pub' }))
diff --git a/services/puppetforge/puppetforge-modules.tester.js b/services/puppetforge/puppetforge-modules.tester.js
index 14e70dcb76..8fcc1cf899 100644
--- a/services/puppetforge/puppetforge-modules.tester.js
+++ b/services/puppetforge/puppetforge-modules.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isSemver } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/pypi/pypi.tester.js b/services/pypi/pypi.tester.js
index e99280389b..00d1400069 100644
--- a/services/pypi/pypi.tester.js
+++ b/services/pypi/pypi.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isMetricOverTimePeriod, isSemver } = require('../test-validators')
 
 const isPsycopg2Version = Joi.string().regex(/^v([0-9][.]?)+$/)
diff --git a/services/readthedocs/readthedocs.tester.js b/services/readthedocs/readthedocs.tester.js
index 5ecb2bb75d..390abc358b 100644
--- a/services/readthedocs/readthedocs.tester.js
+++ b/services/readthedocs/readthedocs.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('build status')
   .get('/pip.json')
diff --git a/services/redmine/redmine.tester.js b/services/redmine/redmine.tester.js
index aa6fb02c11..b1da1ec989 100644
--- a/services/redmine/redmine.tester.js
+++ b/services/redmine/redmine.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isStarRating } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/requires/requires.tester.js b/services/requires/requires.tester.js
index 34a6503643..adc347272d 100644
--- a/services/requires/requires.tester.js
+++ b/services/requires/requires.tester.js
@@ -6,7 +6,7 @@ const isRequireStatus = Joi.string().regex(
   /^(up to date|outdated|insecure|unknown)$/
 )
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('requirements (valid, without branch)')
   .get('/github/celery/celery.json')
diff --git a/services/resharper/resharper.tester.js b/services/resharper/resharper.tester.js
index 35b10de1e0..2ff327a186 100644
--- a/services/resharper/resharper.tester.js
+++ b/services/resharper/resharper.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const {
   isMetric,
   isVPlusDottedVersionNClauses,
diff --git a/services/scrutinizer/scrutinizer.tester.js b/services/scrutinizer/scrutinizer.tester.js
index bc2708e912..e81bf0e2a7 100644
--- a/services/scrutinizer/scrutinizer.tester.js
+++ b/services/scrutinizer/scrutinizer.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isIntegerPercentage } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/shippable/shippable.tester.js b/services/shippable/shippable.tester.js
index 41387ee524..d425e81396 100644
--- a/services/shippable/shippable.tester.js
+++ b/services/shippable/shippable.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('build status (valid, without branch)')
   .get('/5444c5ecb904a4b21567b0ff.json')
diff --git a/services/snap-ci/snap-ci.tester.js b/services/snap-ci/snap-ci.tester.js
index 1661142c47..194966fc5b 100644
--- a/services/snap-ci/snap-ci.tester.js
+++ b/services/snap-ci/snap-ci.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = new ServiceTester({ id: 'snap-ci', title: 'Snap CI' })
 module.exports = t
diff --git a/services/snyk/snyk-vulnerability-github.tester.js b/services/snyk/snyk-vulnerability-github.tester.js
index 5ff1270df6..825b780c2f 100644
--- a/services/snyk/snyk-vulnerability-github.tester.js
+++ b/services/snyk/snyk-vulnerability-github.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 const {
   twoVulnerabilitiesSvg,
   zeroVulnerabilitiesSvg,
diff --git a/services/snyk/snyk-vulnerability-npm.tester.js b/services/snyk/snyk-vulnerability-npm.tester.js
index a806a855ea..1b083a5f60 100644
--- a/services/snyk/snyk-vulnerability-npm.tester.js
+++ b/services/snyk/snyk-vulnerability-npm.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 const {
   twoVulnerabilitiesSvg,
   zeroVulnerabilitiesSvg,
diff --git a/services/sonarqube/sonarqube.tester.js b/services/sonarqube/sonarqube.tester.js
index 8a1d18c208..bcd64af3b0 100644
--- a/services/sonarqube/sonarqube.tester.js
+++ b/services/sonarqube/sonarqube.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isIntegerPercentage } = require('../test-validators')
 
 const t = new ServiceTester({ id: 'sonar', title: 'SonarQube' })
diff --git a/services/sourceforge/sourceforge.tester.js b/services/sourceforge/sourceforge.tester.js
index aae9ac2313..1bbe841c49 100644
--- a/services/sourceforge/sourceforge.tester.js
+++ b/services/sourceforge/sourceforge.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
 const t = new ServiceTester({ id: 'sourceforge', title: 'SourceForge' })
diff --git a/services/sourcegraph/sourcegraph.tester.js b/services/sourcegraph/sourcegraph.tester.js
index 8bfab1d010..bed874a9ea 100644
--- a/services/sourcegraph/sourcegraph.tester.js
+++ b/services/sourcegraph/sourcegraph.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { withRegex } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 // Matches API responses such as "0 projects", "1 projects", "182 projects", "14.0k projects".
 // There may be other cases not covered by this regex, but hopefully the tested projects won't vary much.
diff --git a/services/spiget/spiget-download-size.tester.js b/services/spiget/spiget-download-size.tester.js
index 66ff7353c4..3e81ec514a 100644
--- a/services/spiget/spiget-download-size.tester.js
+++ b/services/spiget/spiget-download-size.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFileSize } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('EssentialsX (id 9089)')
   .get('/9089.json')
diff --git a/services/spiget/spiget-downloads.tester.js b/services/spiget/spiget-downloads.tester.js
index ebe106c8a5..885e32b387 100644
--- a/services/spiget/spiget-downloads.tester.js
+++ b/services/spiget/spiget-downloads.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('EssentialsX (id 9089)')
   .get('/9089.json')
diff --git a/services/spiget/spiget-latest-version.tester.js b/services/spiget/spiget-latest-version.tester.js
index 4ef39c50c2..7dd99dfdae 100644
--- a/services/spiget/spiget-latest-version.tester.js
+++ b/services/spiget/spiget-latest-version.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { withRegex } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 // Note that Spigot versions can be anything (including just a string), so we'll make sure it's not returning 'not found'
 
diff --git a/services/spiget/spiget-rating.tester.js b/services/spiget/spiget-rating.tester.js
index 3fb2a03b02..901c4b679f 100644
--- a/services/spiget/spiget-rating.tester.js
+++ b/services/spiget/spiget-rating.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isStarRating, withRegex } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Stars - EssentialsX (id 9089)')
   .get('/stars/9089.json')
diff --git a/services/spiget/spiget-tested-versions.tester.js b/services/spiget/spiget-tested-versions.tester.js
index 75139b7157..51da667b6f 100644
--- a/services/spiget/spiget-tested-versions.tester.js
+++ b/services/spiget/spiget-tested-versions.tester.js
@@ -5,7 +5,7 @@ const { withRegex } = require('../test-validators')
 
 const multipleVersions = withRegex(/^([+]?\d*\.\d+)(-)([+]?\d*\.\d+)$/)
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('EssentialsX - multiple versions supported - (id 9089)')
   .get('/9089.json')
diff --git a/services/stackexchange/stackexchange-monthlyquestions.tester.js b/services/stackexchange/stackexchange-monthlyquestions.tester.js
index 3794545312..ae961c1ce6 100644
--- a/services/stackexchange/stackexchange-monthlyquestions.tester.js
+++ b/services/stackexchange/stackexchange-monthlyquestions.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetricOverTimePeriod } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Monthly Questions for StackOverflow Momentjs')
   .get('/stackoverflow/qm/momentjs.json')
diff --git a/services/stackexchange/stackexchange-reputation.tester.js b/services/stackexchange/stackexchange-reputation.tester.js
index 07afd7fc5f..20ad4685e9 100644
--- a/services/stackexchange/stackexchange-reputation.tester.js
+++ b/services/stackexchange/stackexchange-reputation.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Invalid parameters')
   .get('/stackoverflow/r/invalidimage.json')
diff --git a/services/stackexchange/stackexchange-taginfo.tester.js b/services/stackexchange/stackexchange-taginfo.tester.js
index d3dbfc4198..0fd2f63b87 100644
--- a/services/stackexchange/stackexchange-taginfo.tester.js
+++ b/services/stackexchange/stackexchange-taginfo.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('JavaScript Questions')
   .get('/stackoverflow/t/javascript.json')
diff --git a/services/static-badge/static-badge.tester.js b/services/static-badge/static-badge.tester.js
index 91a87ae801..c6daccb777 100644
--- a/services/static-badge/static-badge.tester.js
+++ b/services/static-badge/static-badge.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Shields colorscheme color')
   .get('/badge/label-message-blue.json?style=_shields_test')
diff --git a/services/steam/steam-workshop.tester.js b/services/steam/steam-workshop.tester.js
index 60c9973b00..3114e39b5c 100644
--- a/services/steam/steam-workshop.tester.js
+++ b/services/steam/steam-workshop.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isMetric, isFileSize, isFormattedDate } = require('../test-validators')
 
 const t = new ServiceTester({ id: 'steam', title: 'Steam Workshop Tests' })
diff --git a/services/swagger/swagger.tester.js b/services/swagger/swagger.tester.js
index 108ac6796c..941bcc8308 100644
--- a/services/swagger/swagger.tester.js
+++ b/services/swagger/swagger.tester.js
@@ -5,7 +5,7 @@ const apiURL = 'http://online.swagger.io'
 const apiGetURL = '/validator/debug'
 const apiGetQueryParams = { url: 'https://example.com/example.json' }
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Valid (mocked)')
   .get(getURL)
diff --git a/services/symfony/symfony-insight.tester.js b/services/symfony/symfony-insight.tester.js
index f37249d826..0eaa9f7799 100644
--- a/services/symfony/symfony-insight.tester.js
+++ b/services/symfony/symfony-insight.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { withRegex } = require('../test-validators')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 const {
   runningMockResponse,
diff --git a/services/teamcity/teamcity-build.tester.js b/services/teamcity/teamcity-build.tester.js
index e118faba40..987f275aad 100644
--- a/services/teamcity/teamcity-build.tester.js
+++ b/services/teamcity/teamcity-build.tester.js
@@ -12,7 +12,7 @@ const {
 const buildStatusValues = Joi.equal('passing', 'failure', 'error').required()
 const buildStatusTextRegex = /^success|failure|error|tests( failed: \d+( \(\d+ new\))?)?(,)?( passed: \d+)?(,)?( ignored: \d+)?(,)?( muted: \d+)?$/
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('live: codebetter unknown build')
   .get('/codebetter/btabc.json')
diff --git a/services/teamcity/teamcity-coverage.tester.js b/services/teamcity/teamcity-coverage.tester.js
index d100f87aef..8046e02989 100644
--- a/services/teamcity/teamcity-coverage.tester.js
+++ b/services/teamcity/teamcity-coverage.tester.js
@@ -9,7 +9,7 @@ const {
   restore,
 } = require('./teamcity-test-helpers')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('live: valid buildId')
   .get('/bt428.json')
diff --git a/services/tester.js b/services/tester.js
new file mode 100644
index 0000000000..c9d230b0f9
--- /dev/null
+++ b/services/tester.js
@@ -0,0 +1,9 @@
+'use strict'
+
+const createServiceTester = require('../core/service-test-runner/create-service-tester')
+const ServiceTester = require('../core/service-test-runner/service-tester')
+
+module.exports = {
+  createServiceTester,
+  ServiceTester,
+}
diff --git a/services/travis/travis-build.tester.js b/services/travis/travis-build.tester.js
index 8641d3fd79..78f05ec698 100644
--- a/services/travis/travis-build.tester.js
+++ b/services/travis/travis-build.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'travis-build',
diff --git a/services/travis/travis-php-version.tester.js b/services/travis/travis-php-version.tester.js
index 8344765469..0b5f4c19e5 100644
--- a/services/travis/travis-php-version.tester.js
+++ b/services/travis/travis-php-version.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { isPhpVersionReduction } = require('../test-validators')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'travis-php-version',
diff --git a/services/twitter/twitter.tester.js b/services/twitter/twitter.tester.js
index d77933c1e3..7e7aec08e7 100644
--- a/services/twitter/twitter.tester.js
+++ b/services/twitter/twitter.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'twitter',
diff --git a/services/uptimerobot/uptimerobot-ratio.tester.js b/services/uptimerobot/uptimerobot-ratio.tester.js
index 495b9a1c64..52f22ceab7 100644
--- a/services/uptimerobot/uptimerobot-ratio.tester.js
+++ b/services/uptimerobot/uptimerobot-ratio.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { isPercentage } = require('../test-validators')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Uptime Robot: Percentage (valid)')
   .get('/m778918918-3e92c097147760ee39d02d36.json')
diff --git a/services/uptimerobot/uptimerobot-status.tester.js b/services/uptimerobot/uptimerobot-status.tester.js
index 7966ecac4a..78b49b64af 100644
--- a/services/uptimerobot/uptimerobot-status.tester.js
+++ b/services/uptimerobot/uptimerobot-status.tester.js
@@ -11,7 +11,7 @@ const isUptimeStatus = Joi.string().valid(
   'down'
 )
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Uptime Robot: Status (valid)')
   .get('/m778918918-3e92c097147760ee39d02d36.json')
diff --git a/services/vaadin-directory/vaadin-directory.tester.js b/services/vaadin-directory/vaadin-directory.tester.js
index 1761e923b7..dba1921967 100644
--- a/services/vaadin-directory/vaadin-directory.tester.js
+++ b/services/vaadin-directory/vaadin-directory.tester.js
@@ -6,7 +6,7 @@ const {
   isStarRating,
   isFormattedDate,
 } = require('../test-validators')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = (module.exports = new ServiceTester({
   id: 'vaadin-directory',
diff --git a/services/versioneye/versioneye.tester.js b/services/versioneye/versioneye.tester.js
index cf23e8e66d..9a6c4c21a6 100644
--- a/services/versioneye/versioneye.tester.js
+++ b/services/versioneye/versioneye.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const t = new ServiceTester({ id: 'versioneye', title: 'VersionEye' })
 module.exports = t
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.tester.js
index 14d07d2f91..ea4f597ac9 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 const { isMetric } = require('../test-validators')
 
 const mockResponse = {
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
index f35f1c4b41..76ed6db782 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 const { isMetric } = require('../test-validators')
 
 const mockResponse = {
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
index 7568243f0b..21593cf3aa 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 const { withRegex, isStarRating } = require('../test-validators')
 
 const isVscodeRating = withRegex(/[0-5]\.[0-9]{1}\/5?\s*\([0-9]*\)$/)
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
index 3fa8f3f37c..84b956383b 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 const { withRegex } = require('../test-validators')
 
 const isMarketplaceVersion = withRegex(/^v(\d+\.\d+\.\d+)(\.\d+)?$/)
diff --git a/services/waffle/waffle.tester.js b/services/waffle/waffle.tester.js
index eb2c5f0d88..8bed1dff59 100644
--- a/services/waffle/waffle.tester.js
+++ b/services/waffle/waffle.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 const fakeData = [
   {
diff --git a/services/website/website.tester.js b/services/website/website.tester.js
index dd88a2a66a..0fa6b981fa 100644
--- a/services/website/website.tester.js
+++ b/services/website/website.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('status of http://shields.io')
   .get('/website/http/shields.io.json?style=_shields_test')
diff --git a/services/wercker/wercker.tester.js b/services/wercker/wercker.tester.js
index d0c78bd01e..0058d9b7e2 100644
--- a/services/wercker/wercker.tester.js
+++ b/services/wercker/wercker.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Build status')
   .get('/build/wercker/go-wercker-api.json')
diff --git a/services/wheelmap/wheelmap.tester.js b/services/wheelmap/wheelmap.tester.js
index 3311389460..97d5c36a94 100644
--- a/services/wheelmap/wheelmap.tester.js
+++ b/services/wheelmap/wheelmap.tester.js
@@ -2,7 +2,7 @@
 
 const serverSecrets = require('../../lib/server-secrets')
 
-const t = (module.exports = require('..').createServiceTester())
+const t = (module.exports = require('../tester').createServiceTester())
 
 const noToken = !serverSecrets.wheelmap_token
 function logTokenWarning() {
diff --git a/services/wordpress/wordpress-downloads.tester.js b/services/wordpress/wordpress-downloads.tester.js
index cc9c8925e0..5033c91bd6 100644
--- a/services/wordpress/wordpress-downloads.tester.js
+++ b/services/wordpress/wordpress-downloads.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
diff --git a/services/wordpress/wordpress-platform.tester.js b/services/wordpress/wordpress-platform.tester.js
index 2b329c5afb..b5d62ccace 100644
--- a/services/wordpress/wordpress-platform.tester.js
+++ b/services/wordpress/wordpress-platform.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/wordpress/wordpress-rating.tester.js b/services/wordpress/wordpress-rating.tester.js
index 91108521d8..2a250032a4 100644
--- a/services/wordpress/wordpress-rating.tester.js
+++ b/services/wordpress/wordpress-rating.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 
 const { isStarRating } = require('../test-validators')
 
diff --git a/services/wordpress/wordpress-version.tester.js b/services/wordpress/wordpress-version.tester.js
index 3a06609d7e..a65a07d3ca 100644
--- a/services/wordpress/wordpress-version.tester.js
+++ b/services/wordpress/wordpress-version.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { ServiceTester } = require('..')
+const { ServiceTester } = require('../tester')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
-- 
GitLab