From 5f4b9f9a3a8e6edd96da60e70a26f6f010237419 Mon Sep 17 00:00:00 2001
From: Sergei Zharinov <zharinov@users.noreply.github.com>
Date: Wed, 18 Aug 2021 08:46:56 +0300
Subject: [PATCH] test: Fix test descriptions and enforce it via new linting
 rule (#11285)

---
 .eslintrc.js                                  |    2 +
 lib/config/decrypt.spec.ts                    |    4 +-
 lib/config/index.spec.ts                      |    3 +-
 lib/config/massage.spec.ts                    |    3 +-
 lib/config/migrate-validate.spec.ts           |    4 +-
 lib/config/migration.spec.ts                  |    3 +-
 lib/config/options/index.spec.ts              |    3 +-
 lib/config/presets/azure/index.spec.ts        |    4 +-
 .../presets/bitbucket-server/index.spec.ts    |    4 +-
 lib/config/presets/bitbucket/index.spec.ts    |    3 +-
 lib/config/presets/gitea/index.spec.ts        |    4 +-
 lib/config/presets/github/index.spec.ts       |    4 +-
 lib/config/presets/gitlab/index.spec.ts       |    3 +-
 lib/config/presets/index.spec.ts              |    4 +-
 lib/config/presets/internal/index.spec.ts     |    4 +-
 lib/config/presets/local/index.spec.ts        |    4 +-
 lib/config/presets/npm/index.spec.ts          |    3 +-
 lib/config/presets/util.spec.ts               |    3 +-
 lib/config/secrets.spec.ts                    |    4 +-
 .../validation-helpers/managers.spec.ts       |    3 +-
 lib/config/validation.spec.ts                 |    3 +-
 lib/datasource/adoptium-java/index.spec.ts    |    4 +-
 lib/datasource/bitbucket-tags/index.spec.ts   |    3 +-
 lib/datasource/cdnjs/index.spec.ts            |    4 +-
 lib/datasource/clojure/index.spec.ts          |    4 +-
 lib/datasource/crate/index.spec.ts            |    4 +-
 lib/datasource/dart/index.spec.ts             |    4 +-
 lib/datasource/datasource.spec.ts             |    3 +-
 lib/datasource/docker/common.spec.ts          |    4 +-
 lib/datasource/docker/index.spec.ts           |    4 +-
 .../galaxy-collection/index.spec.ts           |    4 +-
 lib/datasource/galaxy/index.spec.ts           |    4 +-
 lib/datasource/git-refs/index.spec.ts         |    4 +-
 lib/datasource/git-tags/index.spec.ts         |    4 +-
 lib/datasource/github-releases/common.spec.ts |    3 +-
 lib/datasource/github-releases/digest.spec.ts |    3 +-
 lib/datasource/github-releases/index.spec.ts  |    3 +-
 lib/datasource/github-tags/index.spec.ts      |    3 +-
 lib/datasource/gitlab-tags/index.spec.ts      |    3 +-
 lib/datasource/go/goproxy.spec.ts             |    4 +-
 lib/datasource/go/index.spec.ts               |    4 +-
 lib/datasource/gradle-version/index.spec.ts   |    4 +-
 lib/datasource/helm/index.spec.ts             |    4 +-
 lib/datasource/hex/index.spec.ts              |    4 +-
 lib/datasource/index.spec.ts                  |    4 +-
 lib/datasource/jenkins-plugins/index.spec.ts  |    4 +-
 lib/datasource/maven/index.spec.ts            |    4 +-
 lib/datasource/metadata.spec.ts               |    3 +-
 lib/datasource/npm/get.spec.ts                |    3 +-
 lib/datasource/npm/index.spec.ts              |    3 +-
 lib/datasource/npm/npmrc.spec.ts              |    4 +-
 lib/datasource/nuget/index.spec.ts            |    4 +-
 lib/datasource/orb/index.spec.ts              |    3 +-
 lib/datasource/packagist/index.spec.ts        |    4 +-
 lib/datasource/pod/index.spec.ts              |    3 +-
 lib/datasource/pypi/index.spec.ts             |    4 +-
 lib/datasource/repology/index.spec.ts         |    4 +-
 lib/datasource/ruby-version/index.spec.ts     |    4 +-
 lib/datasource/rubygems/index.spec.ts         |    4 +-
 lib/datasource/sbt-package/index.spec.ts      |    4 +-
 lib/datasource/sbt-plugin/index.spec.ts       |    4 +-
 lib/datasource/terraform-module/index.spec.ts |    4 +-
 .../terraform-provider/index.spec.ts          |    4 +-
 lib/logger/__snapshots__/index.spec.ts.snap   |    2 +-
 lib/logger/config-serializer.spec.ts          |    3 +-
 lib/logger/err-serializer.spec.ts             |    4 +-
 lib/logger/index.spec.ts                      |    2 +-
 lib/logger/pretty-stdout.spec.ts              |    3 +-
 lib/manager/ansible-galaxy/extract.spec.ts    |    4 +-
 lib/manager/ansible/extract.spec.ts           |    4 +-
 lib/manager/argocd/extract.spec.ts            |    4 +-
 lib/manager/azure-pipelines/extract.spec.ts   |    4 +-
 lib/manager/batect-wrapper/artifacts.spec.ts  |    3 +-
 lib/manager/batect-wrapper/extract.spec.ts    |    4 +-
 lib/manager/batect/extract.spec.ts            |    3 +-
 lib/manager/bazel/extract.spec.ts             |    4 +-
 lib/manager/bazel/update.spec.ts              |    4 +-
 lib/manager/buildkite/extract.spec.ts         |    4 +-
 .../__snapshots__/artifacts.spec.ts.snap      |   26 +-
 .../__snapshots__/gemfile.spec.ts.snap        |    2 +-
 .../__snapshots__/locked-version.spec.ts.snap |   10 +-
 lib/manager/bundler/artifacts.spec.ts         |    2 +-
 lib/manager/bundler/extract.spec.ts           |    4 +-
 lib/manager/bundler/gemfile.spec.ts           |    2 +-
 lib/manager/bundler/host-rules.spec.ts        |    3 +-
 lib/manager/bundler/locked-version.spec.ts    |    2 +-
 lib/manager/bundler/range.spec.ts             |    3 +-
 lib/manager/cake/index.spec.ts                |    4 +-
 .../__snapshots__/artifacts.spec.ts.snap      |   12 +-
 lib/manager/cargo/artifacts.spec.ts           |    2 +-
 lib/manager/cargo/extract.spec.ts             |    4 +-
 lib/manager/cdnurl/extract.spec.ts            |    4 +-
 lib/manager/circleci/extract.spec.ts          |    4 +-
 lib/manager/cloudbuild/extract.spec.ts        |    4 +-
 .../__snapshots__/artifacts.spec.ts.snap      |   24 +-
 lib/manager/cocoapods/artifacts.spec.ts       |    2 +-
 lib/manager/cocoapods/extract.spec.ts         |    4 +-
 .../__snapshots__/artifacts.spec.ts.snap      |   20 +-
 lib/manager/composer/artifacts.spec.ts        |    2 +-
 lib/manager/composer/extract.spec.ts          |    4 +-
 lib/manager/composer/range.spec.ts            |    2 +-
 lib/manager/composer/utils.spec.ts            |    4 +-
 lib/manager/deps-edn/extract.spec.ts          |    4 +-
 lib/manager/docker-compose/extract.spec.ts    |    4 +-
 lib/manager/dockerfile/extract.spec.ts        |    4 +-
 lib/manager/droneci/extract.spec.ts           |    4 +-
 lib/manager/git-submodules/artifact.spec.ts   |    3 +-
 lib/manager/git-submodules/extract.spec.ts    |    4 +-
 lib/manager/git-submodules/update.spec.ts     |    3 +-
 lib/manager/github-actions/extract.spec.ts    |    4 +-
 lib/manager/gitlabci-include/extract.spec.ts  |    4 +-
 lib/manager/gitlabci/extract.spec.ts          |    4 +-
 .../__snapshots__/artifacts.spec.ts.snap      |   40 +-
 lib/manager/gomod/artifacts.spec.ts           |    2 +-
 lib/manager/gomod/extract.spec.ts             |    4 +-
 lib/manager/gomod/update.spec.ts              |    4 +-
 .../gradle-wrapper/artifacts-real.spec.ts     |    4 +-
 lib/manager/gradle-wrapper/artifacts.spec.ts  |    3 +-
 lib/manager/gradle-wrapper/extract.spec.ts    |    4 +-
 lib/manager/gradle/deep/build-gradle.spec.ts  |    3 +-
 .../gradle/deep/gradle-updates-report.spec.ts |    3 +-
 lib/manager/gradle/deep/index-real.spec.ts    |    3 +-
 lib/manager/gradle/deep/index.spec.ts         |    3 +-
 lib/manager/gradle/shallow/extract.spec.ts    |    4 +-
 lib/manager/gradle/shallow/parser.spec.ts     |    4 +-
 lib/manager/gradle/shallow/tokenizer.spec.ts  |    3 +-
 lib/manager/gradle/shallow/update.spec.ts     |    3 +-
 lib/manager/gradle/shallow/utils.spec.ts      |    3 +-
 lib/manager/helm-requirements/extract.spec.ts |    4 +-
 lib/manager/helm-values/extract.spec.ts       |    4 +-
 lib/manager/helmfile/extract.spec.ts          |    4 +-
 .../__snapshots__/artifacts.spec.ts.snap      |   10 +-
 lib/manager/helmv3/artifacts.spec.ts          |    2 +-
 lib/manager/helmv3/extract.spec.ts            |    4 +-
 lib/manager/helmv3/update.spec.ts             |    3 +-
 lib/manager/homebrew/extract.spec.ts          |    4 +-
 lib/manager/homebrew/update.spec.ts           |    4 +-
 lib/manager/homebrew/util.spec.ts             |    3 +-
 lib/manager/html/extract.spec.ts              |    4 +-
 lib/manager/index.spec.ts                     |    3 +-
 lib/manager/jenkins/extract.spec.ts           |    4 +-
 lib/manager/kubernetes/extract.spec.ts        |    4 +-
 lib/manager/kustomize/extract.spec.ts         |    4 +-
 lib/manager/leiningen/extract.spec.ts         |    4 +-
 lib/manager/maven/extract.spec.ts             |    4 +-
 lib/manager/maven/index.spec.ts               |    4 +-
 lib/manager/metadata.spec.ts                  |    2 +-
 lib/manager/meteor/extract.spec.ts            |    4 +-
 lib/manager/mix/artifacts.spec.ts             |    4 +-
 lib/manager/mix/extract.spec.ts               |    4 +-
 lib/manager/nodenv/extract.spec.ts            |    3 +-
 lib/manager/npm/extract/index.spec.ts         |    4 +-
 .../npm/extract/locked-versions.spec.ts       |    3 +-
 lib/manager/npm/extract/monorepo.spec.ts      |    3 +-
 lib/manager/npm/extract/npm.spec.ts           |    4 +-
 lib/manager/npm/extract/pnpm.spec.ts          |    4 +-
 lib/manager/npm/extract/type.spec.ts          |    3 +-
 lib/manager/npm/extract/utils.spec.ts         |    3 +-
 lib/manager/npm/extract/yarn.spec.ts          |    4 +-
 .../__snapshots__/npm.spec.ts.snap            |   18 +-
 .../__snapshots__/pnpm.spec.ts.snap           |    8 +-
 lib/manager/npm/post-update/lerna.spec.ts     |    4 +-
 .../npm/post-update/node-version.spec.ts      |    2 +-
 lib/manager/npm/post-update/npm.spec.ts       |    2 +-
 lib/manager/npm/post-update/pnpm.spec.ts      |    2 +-
 lib/manager/npm/post-update/rules.spec.ts     |    3 +-
 lib/manager/npm/post-update/yarn.spec.ts      |    4 +-
 lib/manager/npm/range.spec.ts                 |    2 +-
 .../npm/update/dependency/index.spec.ts       |    4 +-
 .../locked-dependency/dep-constraints.spec.ts |    4 +-
 .../locked-dependency/get-locked.spec.ts      |    4 +-
 .../update/locked-dependency/index.spec.ts    |    4 +-
 .../locked-dependency/parent-version.spec.ts  |    4 +-
 .../npm/update/package-version/index.spec.ts  |    3 +-
 .../__snapshots__/artifacts.spec.ts.snap      |   22 +-
 lib/manager/nuget/artifacts.spec.ts           |    2 +-
 lib/manager/nuget/extract.spec.ts             |    4 +-
 lib/manager/nvm/extract.spec.ts               |    3 +-
 .../__snapshots__/artifacts.spec.ts.snap      |   12 +-
 lib/manager/pip-compile/artifacts.spec.ts     |    2 +-
 .../pip_requirements/artifacts.spec.ts        |    2 +-
 lib/manager/pip_requirements/extract.spec.ts  |    4 +-
 lib/manager/pip_requirements/range.spec.ts    |    2 +-
 lib/manager/pip_setup/extract.spec.ts         |    4 +-
 lib/manager/pip_setup/index.spec.ts           |    4 +-
 .../__snapshots__/artifacts.spec.ts.snap      |   18 +-
 lib/manager/pipenv/artifacts.spec.ts          |    2 +-
 lib/manager/pipenv/extract.spec.ts            |    4 +-
 .../__snapshots__/artifacts.spec.ts.snap      |   16 +-
 lib/manager/poetry/artifacts.spec.ts          |    2 +-
 lib/manager/poetry/extract.spec.ts            |    4 +-
 lib/manager/pre-commit/extract.spec.ts        |    4 +-
 lib/manager/pub/extract.spec.ts               |    4 +-
 lib/manager/pyenv/extract.spec.ts             |    3 +-
 lib/manager/range.spec.ts                     |    2 +-
 lib/manager/regex/index.spec.ts               |    4 +-
 lib/manager/ruby-version/extract.spec.ts      |    3 +-
 lib/manager/sbt/extract.spec.ts               |    4 +-
 lib/manager/sbt/update.spec.ts                |    3 +-
 lib/manager/setup-cfg/extract.spec.ts         |    4 +-
 lib/manager/setup-cfg/range.spec.ts           |    2 +-
 lib/manager/swift/index.spec.ts               |    4 +-
 lib/manager/terraform-version/extract.spec.ts |    3 +-
 lib/manager/terraform/extract.spec.ts         |    4 +-
 lib/manager/terraform/lockfile/hash.spec.ts   |    9 +-
 lib/manager/terraform/lockfile/index.spec.ts  |    4 +-
 lib/manager/terraform/lockfile/util.spec.ts   |    4 +-
 lib/manager/terraform/modules.spec.ts         |    3 +-
 lib/manager/terraform/util.spec.ts            |    3 +-
 .../terragrunt-version/extract.spec.ts        |    3 +-
 lib/manager/terragrunt/extract.spec.ts        |    4 +-
 lib/manager/terragrunt/modules.spec.ts        |    3 +-
 lib/manager/terragrunt/util.spec.ts           |    3 +-
 lib/manager/travis/extract.spec.ts            |    4 +-
 lib/platform/azure/azure-got-wrapper.spec.ts  |    3 +-
 lib/platform/azure/azure-helper.spec.ts       |    3 +-
 lib/platform/azure/index.spec.ts              |    3 +-
 lib/platform/azure/util.spec.ts               |    3 +-
 lib/platform/bitbucket-server/index.spec.ts   |    3 +-
 .../__snapshots__/utils.spec.ts.snap          |    2 +-
 lib/platform/bitbucket/comments.spec.ts       |    3 +-
 lib/platform/bitbucket/index.spec.ts          |    3 +-
 lib/platform/bitbucket/utils.spec.ts          |    2 +-
 lib/platform/gitea/gitea-helper.spec.ts       |    3 +-
 lib/platform/gitea/index.spec.ts              |    4 +-
 lib/platform/github/index.spec.ts             |    4 +-
 .../github/massage-markdown-links.spec.ts     |    3 +-
 lib/platform/gitlab/index.spec.ts             |    3 +-
 lib/platform/index.spec.ts                    |    3 +-
 lib/platform/utils/pr-body.spec.ts            |    4 +-
 .../utils/read-only-issue-body.spec.ts        |    4 +-
 .../__snapshots__/package-rules.spec.ts.snap  |    4 +-
 lib/util/cache/memory/index.spec.ts           |    2 +-
 lib/util/cache/package/decorator.spec.ts      |    3 +-
 lib/util/cache/package/file.spec.ts           |    3 +-
 lib/util/cache/package/index.spec.ts          |    3 +-
 lib/util/cache/repository/index.spec.ts       |    4 +-
 lib/util/emoji.spec.ts                        |    3 +-
 lib/util/exec/docker/index.spec.ts            |    3 +-
 lib/util/exec/env.spec.ts                     |    2 +-
 lib/util/exec/index.spec.ts                   |    3 +-
 lib/util/fs/index.spec.ts                     |    8 +-
 lib/util/fs/proxies.spec.ts                   |    3 +-
 lib/util/git/index.spec.ts                    |    3 +-
 lib/util/git/private-key.spec.ts              |    4 +-
 lib/util/git/url.spec.ts                      |    4 +-
 lib/util/host-rules.spec.ts                   |    3 +-
 lib/util/html.spec.ts                         |    3 +-
 lib/util/http/auth.spec.ts                    |    4 +-
 lib/util/http/bitbucket-server.spec.ts        |    3 +-
 lib/util/http/bitbucket.spec.ts               |    3 +-
 lib/util/http/gitea.spec.ts                   |    3 +-
 lib/util/http/github.spec.ts                  |    3 +-
 lib/util/http/gitlab.spec.ts                  |    3 +-
 lib/util/http/host-rules.spec.ts              |    3 +-
 lib/util/http/index.spec.ts                   |    3 +-
 lib/util/http/queue.spec.ts                   |    3 +-
 lib/util/index.spec.ts                        |    3 +-
 lib/util/markdown.spec.ts                     |    3 +-
 lib/util/mask.spec.ts                         |    3 +-
 lib/util/merge-confidence/index.spec.ts       |    3 +-
 lib/util/object.spec.ts                       |    3 +-
 lib/util/package-rules.spec.ts                |    2 +-
 lib/util/regex.spec.ts                        |    3 +-
 lib/util/sanitize.spec.ts                     |    3 +-
 lib/util/split.spec.ts                        |    3 +-
 lib/util/template/index.spec.ts               |    3 +-
 lib/util/url.spec.ts                          |    3 +-
 .../__snapshots__/index.spec.ts.snap          |    2 +-
 lib/versioning/composer/index.spec.ts         | 1060 +++++++++--------
 lib/versioning/docker/index.spec.ts           |    2 +-
 lib/versioning/git/index.spec.ts              |    2 +-
 lib/versioning/gradle/index.spec.ts           |    5 +-
 lib/versioning/hashicorp/index.spec.ts        |  230 ++--
 lib/versioning/hex/index.spec.ts              |    3 +-
 lib/versioning/index.spec.ts                  |    2 +-
 lib/versioning/ivy/index.spec.ts              |    5 +-
 .../loose/__snapshots__/index.spec.ts.snap    |    6 +-
 lib/versioning/loose/index.spec.ts            |    2 +-
 lib/versioning/loose/utils.spec.ts            |    3 +-
 lib/versioning/maven/index.spec.ts            |    5 +-
 lib/versioning/node/index.spec.ts             |    2 +-
 lib/versioning/npm/index.spec.ts              |  700 +++++------
 .../nuget/__snapshots__/index.spec.ts.snap    |   48 +-
 lib/versioning/nuget/index.spec.ts            |    2 +-
 lib/versioning/pep440/index.spec.ts           |  390 +++---
 lib/versioning/poetry/index.spec.ts           |    3 +-
 lib/versioning/regex/index.spec.ts            |    2 +-
 .../ruby/__snapshots__/index.spec.ts.snap     |    2 +-
 lib/versioning/ruby/index.spec.ts             |    2 +-
 lib/versioning/semver/index.spec.ts           |  100 +-
 lib/versioning/swift/index.spec.ts            |  182 +--
 lib/versioning/ubuntu/index.spec.ts           |    3 +-
 lib/versioning/versioning-metadata.spec.ts    |    2 +-
 lib/workers/branch/auto-replace.spec.ts       |    4 +-
 lib/workers/branch/automerge.spec.ts          |    4 +-
 lib/workers/branch/check-existing.spec.ts     |    4 +-
 lib/workers/branch/commit.spec.ts             |    4 +-
 lib/workers/branch/get-updated.spec.ts        |    4 +-
 lib/workers/branch/index.spec.ts              |   10 +-
 lib/workers/branch/lock-files/index.spec.ts   |    4 +-
 lib/workers/branch/reuse.spec.ts              |    4 +-
 lib/workers/branch/schedule.spec.ts           |    3 +-
 lib/workers/branch/status-checks.spec.ts      |    4 +-
 lib/workers/global/autodiscover.spec.ts       |    3 +-
 lib/workers/global/config/parse/cli.spec.ts   |    3 +-
 lib/workers/global/config/parse/env.spec.ts   |    3 +-
 lib/workers/global/config/parse/file.spec.ts  |    3 +-
 lib/workers/global/config/parse/index.spec.ts |    3 +-
 lib/workers/global/index.spec.ts              |    4 +-
 lib/workers/global/limits.spec.ts             |    3 +-
 lib/workers/pr/automerge.spec.ts              |    4 +-
 lib/workers/pr/body/controls.spec.ts          |    4 +-
 lib/workers/pr/changelog/github.spec.ts       |    3 +-
 lib/workers/pr/changelog/gitlab.spec.ts       |    3 +-
 lib/workers/pr/changelog/index.spec.ts        |    4 +-
 .../pr/changelog/release-notes.spec.ts        |    4 +-
 lib/workers/pr/changelog/releases.spec.ts     |    4 +-
 lib/workers/pr/code-owners.spec.ts            |    4 +-
 lib/workers/pr/index.spec.ts                  |    4 +-
 lib/workers/repository/configured.spec.ts     |    4 +-
 .../repository/dependency-dashboard.spec.ts   |    3 +-
 lib/workers/repository/error-config.spec.ts   |    9 +-
 lib/workers/repository/error.spec.ts          |    4 +-
 .../repository/extract/file-match.spec.ts     |    4 +-
 lib/workers/repository/extract/index.spec.ts  |    4 +-
 .../repository/extract/manager-files.spec.ts  |    4 +-
 lib/workers/repository/finalise/prune.spec.ts |    3 +-
 lib/workers/repository/index.spec.ts          |    4 +-
 lib/workers/repository/init/apis.spec.ts      |    9 +-
 lib/workers/repository/init/cache.spec.ts     |    4 +-
 lib/workers/repository/init/index.spec.ts     |    4 +-
 lib/workers/repository/init/merge.spec.ts     |    3 +-
 lib/workers/repository/init/semantic.spec.ts  |    4 +-
 .../repository/init/vulnerability.spec.ts     |    3 +-
 .../repository/model/commit-message.spec.ts   |    3 +-
 .../onboarding/branch/config.spec.ts          |    4 +-
 .../onboarding/branch/create.spec.ts          |    4 +-
 .../onboarding/branch/index.spec.ts           |    3 +-
 .../onboarding/branch/rebase.spec.ts          |    9 +-
 .../onboarding/pr/base-branch.spec.ts         |    4 +-
 .../onboarding/pr/config-description.spec.ts  |    4 +-
 .../onboarding/pr/errors-warnings.spec.ts     |    4 +-
 .../repository/onboarding/pr/index.spec.ts    |    3 +-
 .../repository/onboarding/pr/pr-list.spec.ts  |    4 +-
 .../repository/process/deprecated.spec.ts     |    4 +-
 .../repository/process/extract-update.spec.ts |    4 +-
 lib/workers/repository/process/fetch.spec.ts  |    9 +-
 lib/workers/repository/process/index.spec.ts  |   10 +-
 lib/workers/repository/process/limits.spec.ts |    3 +-
 .../process/lookup/filter-checks.spec.ts      |    4 +-
 .../repository/process/lookup/index.spec.ts   |    3 +-
 lib/workers/repository/process/sort.spec.ts   |    3 +-
 lib/workers/repository/process/write.spec.ts  |   10 +-
 lib/workers/repository/result.spec.ts         |    4 +-
 lib/workers/repository/stats.spec.ts          |    3 +-
 .../repository/updates/branch-name.spec.ts    |    3 +-
 .../repository/updates/branchify.spec.ts      |    4 +-
 .../repository/updates/flatten.spec.ts        |    4 +-
 .../repository/updates/generate.spec.ts       |    4 +-
 package.json                                  |    1 +
 test/util.ts                                  |    6 -
 test/website-docs.spec.ts                     |    2 +-
 yarn.lock                                     |    4 +
 364 files changed, 2001 insertions(+), 2164 deletions(-)

diff --git a/.eslintrc.js b/.eslintrc.js
index 7b963dad11..c9138b5c43 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -3,6 +3,7 @@ module.exports = {
   env: {
     node: true,
   },
+  plugins: ['@renovate'],
   extends: [
     'airbnb-typescript/base',
     'plugin:import/errors',
@@ -105,6 +106,7 @@ module.exports = {
 
     '@typescript-eslint/unbound-method': 2,
     '@typescript-eslint/ban-types': 2,
+    '@renovate/jest-root-describe': 2,
   },
   settings: {
     'import/parsers': {
diff --git a/lib/config/decrypt.spec.ts b/lib/config/decrypt.spec.ts
index a3045bb6f6..7466e0a8cb 100644
--- a/lib/config/decrypt.spec.ts
+++ b/lib/config/decrypt.spec.ts
@@ -1,11 +1,11 @@
-import { getName, loadFixture } from '../../test/util';
+import { loadFixture } from '../../test/util';
 import { decryptConfig } from './decrypt';
 import { setGlobalConfig } from './global';
 import type { RenovateConfig } from './types';
 
 const privateKey = loadFixture('private.pem', '.');
 
-describe(getName(), () => {
+describe('config/decrypt', () => {
   describe('decryptConfig()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/config/index.spec.ts b/lib/config/index.spec.ts
index 73744b497e..f0ab843c78 100644
--- a/lib/config/index.spec.ts
+++ b/lib/config/index.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../test/util';
 import { getConfig } from './defaults';
 
 jest.mock('../datasource/npm');
@@ -10,7 +9,7 @@ try {
 
 const defaultConfig = getConfig();
 
-describe(getName(), () => {
+describe('config/index', () => {
   describe('mergeChildConfig(parentConfig, childConfig)', () => {
     it('merges', async () => {
       const parentConfig = { ...defaultConfig };
diff --git a/lib/config/massage.spec.ts b/lib/config/massage.spec.ts
index c8a44eb84a..d952354cd8 100644
--- a/lib/config/massage.spec.ts
+++ b/lib/config/massage.spec.ts
@@ -1,8 +1,7 @@
-import { getName } from '../../test/util';
 import * as massage from './massage';
 import type { RenovateConfig } from './types';
 
-describe(getName(), () => {
+describe('config/massage', () => {
   describe('massageConfig', () => {
     it('returns empty', () => {
       const config: RenovateConfig = {};
diff --git a/lib/config/migrate-validate.spec.ts b/lib/config/migrate-validate.spec.ts
index 5fd350a01e..c6c40f7004 100644
--- a/lib/config/migrate-validate.spec.ts
+++ b/lib/config/migrate-validate.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig, getName } from '../../test/util';
+import { RenovateConfig, getConfig } from '../../test/util';
 import { migrateAndValidate } from './migrate-validate';
 
 let config: RenovateConfig;
@@ -7,7 +7,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe(getName(), () => {
+describe('config/migrate-validate', () => {
   describe('migrateAndValidate()', () => {
     it('handles empty', async () => {
       const res = await migrateAndValidate(config, {});
diff --git a/lib/config/migration.spec.ts b/lib/config/migration.spec.ts
index 890d566e63..08bb570a50 100644
--- a/lib/config/migration.spec.ts
+++ b/lib/config/migration.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../test/util';
 import { PLATFORM_TYPE_GITHUB } from '../constants/platforms';
 import { getConfig } from './defaults';
 import { setGlobalConfig } from './global';
@@ -15,7 +14,7 @@ interface TestRenovateConfig extends RenovateConfig {
   node?: RenovateSharedConfig;
 }
 
-describe(getName(), () => {
+describe('config/migration', () => {
   describe('migrateConfig(config, parentConfig)', () => {
     it('migrates config', () => {
       const config: TestRenovateConfig = {
diff --git a/lib/config/options/index.spec.ts b/lib/config/options/index.spec.ts
index 40d6c677ca..c24d6d4bdb 100644
--- a/lib/config/options/index.spec.ts
+++ b/lib/config/options/index.spec.ts
@@ -1,11 +1,10 @@
-import { getName } from '../../../test/util';
 import { getOptions } from '.';
 
 jest.mock('../../manager', () => ({
   getManagers: jest.fn(() => new Map().set('testManager', {})),
 }));
 
-describe(getName(), () => {
+describe('config/options/index', () => {
   it('test manager should have no defaultConfig', () => {
     const opts = getOptions();
     expect(opts.filter((o) => o.name === 'testManager')).toEqual([]);
diff --git a/lib/config/presets/azure/index.spec.ts b/lib/config/presets/azure/index.spec.ts
index 3c7e8467aa..5d00d0d365 100644
--- a/lib/config/presets/azure/index.spec.ts
+++ b/lib/config/presets/azure/index.spec.ts
@@ -1,5 +1,5 @@
 import { Readable } from 'stream';
-import { getName, mocked } from '../../../../test/util';
+import { mocked } from '../../../../test/util';
 import { setPlatformApi } from '../../../platform';
 import * as _azureApi from '../../../platform/azure/azure-got-wrapper';
 import { PRESET_DEP_NOT_FOUND, PRESET_INVALID_JSON } from '../util';
@@ -10,7 +10,7 @@ jest.mock('../../../platform/azure/azure-got-wrapper');
 
 const azureApi = mocked(_azureApi);
 
-describe(getName(), () => {
+describe('config/presets/azure/index', () => {
   beforeAll(() => {
     setPlatformApi('azure');
   });
diff --git a/lib/config/presets/bitbucket-server/index.spec.ts b/lib/config/presets/bitbucket-server/index.spec.ts
index a6f0c86611..9e98bd0115 100644
--- a/lib/config/presets/bitbucket-server/index.spec.ts
+++ b/lib/config/presets/bitbucket-server/index.spec.ts
@@ -1,5 +1,5 @@
 import * as httpMock from '../../../../test/http-mock';
-import { getName, mocked } from '../../../../test/util';
+import { mocked } from '../../../../test/util';
 import * as _hostRules from '../../../util/host-rules';
 import { PRESET_DEP_NOT_FOUND, PRESET_INVALID_JSON } from '../util';
 import * as bitbucketServer from '.';
@@ -11,7 +11,7 @@ const hostRules = mocked(_hostRules);
 const bitbucketApiHost = 'https://git.company.org';
 const basePath = '/rest/api/1.0/projects/some/repos/repo/browse';
 
-describe(getName(), () => {
+describe('config/presets/bitbucket-server/index', () => {
   beforeEach(() => {
     hostRules.find.mockReturnValue({ token: 'abc' });
   });
diff --git a/lib/config/presets/bitbucket/index.spec.ts b/lib/config/presets/bitbucket/index.spec.ts
index 7a69e16f7e..d7d1144d75 100644
--- a/lib/config/presets/bitbucket/index.spec.ts
+++ b/lib/config/presets/bitbucket/index.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../../../test/http-mock';
-import { getName } from '../../../../test/util';
 import { setPlatformApi } from '../../../platform';
 import { PRESET_DEP_NOT_FOUND, PRESET_INVALID_JSON } from '../util';
 import * as bitbucket from '.';
@@ -9,7 +8,7 @@ jest.unmock('../../../platform');
 const baseUrl = 'https://api.bitbucket.org';
 const basePath = '/2.0/repositories/some/repo/src/HEAD';
 
-describe(getName(), () => {
+describe('config/presets/bitbucket/index', () => {
   beforeAll(() => {
     setPlatformApi('bitbucket');
   });
diff --git a/lib/config/presets/gitea/index.spec.ts b/lib/config/presets/gitea/index.spec.ts
index 213b77ad6e..c9394a3a66 100644
--- a/lib/config/presets/gitea/index.spec.ts
+++ b/lib/config/presets/gitea/index.spec.ts
@@ -1,5 +1,5 @@
 import * as httpMock from '../../../../test/http-mock';
-import { getName, mocked } from '../../../../test/util';
+import { mocked } from '../../../../test/util';
 import * as _hostRules from '../../../util/host-rules';
 import { setBaseUrl } from '../../../util/http/gitea';
 import { PRESET_INVALID_JSON, PRESET_NOT_FOUND } from '../util';
@@ -12,7 +12,7 @@ const hostRules = mocked(_hostRules);
 const giteaApiHost = gitea.Endpoint;
 const basePath = '/repos/some/repo/contents';
 
-describe(getName(), () => {
+describe('config/presets/gitea/index', () => {
   beforeEach(() => {
     hostRules.find.mockReturnValue({ token: 'abc' });
     setBaseUrl(giteaApiHost);
diff --git a/lib/config/presets/github/index.spec.ts b/lib/config/presets/github/index.spec.ts
index 79fc22a514..1ae4e70822 100644
--- a/lib/config/presets/github/index.spec.ts
+++ b/lib/config/presets/github/index.spec.ts
@@ -1,5 +1,5 @@
 import * as httpMock from '../../../../test/http-mock';
-import { getName, mocked } from '../../../../test/util';
+import { mocked } from '../../../../test/util';
 import * as _hostRules from '../../../util/host-rules';
 import { PRESET_INVALID_JSON, PRESET_NOT_FOUND } from '../util';
 import * as github from '.';
@@ -11,7 +11,7 @@ const hostRules = mocked(_hostRules);
 const githubApiHost = github.Endpoint;
 const basePath = '/repos/some/repo/contents';
 
-describe(getName(), () => {
+describe('config/presets/github/index', () => {
   beforeEach(() => {
     hostRules.find.mockReturnValue({ token: 'abc' });
   });
diff --git a/lib/config/presets/gitlab/index.spec.ts b/lib/config/presets/gitlab/index.spec.ts
index b100dc70f5..1ba88176c6 100644
--- a/lib/config/presets/gitlab/index.spec.ts
+++ b/lib/config/presets/gitlab/index.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../../../test/http-mock';
-import { getName } from '../../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../../constants/error-messages';
 import { PRESET_DEP_NOT_FOUND } from '../util';
 import * as gitlab from '.';
@@ -7,7 +6,7 @@ import * as gitlab from '.';
 const gitlabApiHost = 'https://gitlab.com';
 const basePath = '/api/v4/projects/some%2Frepo/repository';
 
-describe(getName(), () => {
+describe('config/presets/gitlab/index', () => {
   beforeEach(() => {
     jest.resetAllMocks();
   });
diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts
index 7d0782489a..7c20323979 100644
--- a/lib/config/presets/index.spec.ts
+++ b/lib/config/presets/index.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadJsonFixture, mocked } from '../../../test/util';
+import { loadJsonFixture, mocked } from '../../../test/util';
 import type { RenovateConfig } from '../types';
 import * as _local from './local';
 import * as _npm from './npm';
@@ -39,7 +39,7 @@ npm.getPreset = jest.fn(({ packageName, presetName }) => {
   return null;
 });
 
-describe(getName(), () => {
+describe('config/presets/index', () => {
   describe('resolvePreset', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/config/presets/internal/index.spec.ts b/lib/config/presets/internal/index.spec.ts
index 0e018bdda8..16ea856ad9 100644
--- a/lib/config/presets/internal/index.spec.ts
+++ b/lib/config/presets/internal/index.spec.ts
@@ -1,4 +1,4 @@
-import { getName, mocked } from '../../../../test/util';
+import { mocked } from '../../../../test/util';
 import { CONFIG_VALIDATION } from '../../../constants/error-messages';
 import { massageConfig } from '../../massage';
 import { validateConfig } from '../../validation';
@@ -14,7 +14,7 @@ npm.getPreset = jest.fn((_) => null);
 
 const ignoredPresets = ['default:group', 'default:timezone'];
 
-describe(getName(), () => {
+describe('config/presets/internal/index', () => {
   it('fails for undefined internal preset', async () => {
     const preset = 'foo:bar';
     const presetConfig = { extends: [preset] };
diff --git a/lib/config/presets/local/index.spec.ts b/lib/config/presets/local/index.spec.ts
index adf8a4cf59..9728192a78 100644
--- a/lib/config/presets/local/index.spec.ts
+++ b/lib/config/presets/local/index.spec.ts
@@ -1,4 +1,4 @@
-import { getName, mocked } from '../../../../test/util';
+import { mocked } from '../../../../test/util';
 import * as _azure from '../azure';
 import * as _bitbucket from '../bitbucket';
 import * as _bitbucketServer from '../bitbucket-server';
@@ -21,7 +21,7 @@ const gitea = mocked(_gitea);
 const github = mocked(_github);
 const gitlab = mocked(_gitlab);
 
-describe(getName(), () => {
+describe('config/presets/local/index', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     const preset = { resolved: 'preset' };
diff --git a/lib/config/presets/npm/index.spec.ts b/lib/config/presets/npm/index.spec.ts
index 5c4dfaac6d..9ec951dd42 100644
--- a/lib/config/presets/npm/index.spec.ts
+++ b/lib/config/presets/npm/index.spec.ts
@@ -1,12 +1,11 @@
 import * as httpMock from '../../../../test/http-mock';
-import { getName } from '../../../../test/util';
 import { setGlobalConfig } from '../../global';
 import * as npm from '.';
 
 jest.mock('registry-auth-token');
 jest.mock('delay');
 
-describe(getName(), () => {
+describe('config/presets/npm/index', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     setGlobalConfig();
diff --git a/lib/config/presets/util.spec.ts b/lib/config/presets/util.spec.ts
index 752dc8fff6..79c8232a35 100644
--- a/lib/config/presets/util.spec.ts
+++ b/lib/config/presets/util.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../../test/util';
 import type { FetchPresetConfig, Preset } from './types';
 import { PRESET_DEP_NOT_FOUND, PRESET_NOT_FOUND, fetchPreset } from './util';
 
@@ -11,7 +10,7 @@ const config: FetchPresetConfig = {
 
 const fetch = jest.fn(() => Promise.resolve<Preset>({}));
 
-describe(getName(), () => {
+describe('config/presets/util', () => {
   beforeEach(() => {
     fetch.mockReset();
   });
diff --git a/lib/config/secrets.spec.ts b/lib/config/secrets.spec.ts
index e1acda1316..20727e6eed 100644
--- a/lib/config/secrets.spec.ts
+++ b/lib/config/secrets.spec.ts
@@ -1,11 +1,11 @@
-import { defaultConfig, getName } from '../../test/util';
+import { defaultConfig } from '../../test/util';
 import {
   CONFIG_SECRETS_INVALID,
   CONFIG_VALIDATION,
 } from '../constants/error-messages';
 import { applySecretsToConfig, validateConfigSecrets } from './secrets';
 
-describe(getName(), () => {
+describe('config/secrets', () => {
   describe('validateConfigSecrets(config)', () => {
     it('works with default config', () => {
       expect(() => validateConfigSecrets(defaultConfig)).not.toThrow();
diff --git a/lib/config/validation-helpers/managers.spec.ts b/lib/config/validation-helpers/managers.spec.ts
index e0d89c1dbc..981e12e253 100644
--- a/lib/config/validation-helpers/managers.spec.ts
+++ b/lib/config/validation-helpers/managers.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { check } from './managers';
 
-describe(getName(), () => {
+describe('config/validation-helpers/managers', () => {
   it('should have no errors', () => {
     const res = check({
       resolvedRule: { matchManagers: ['npm'] },
diff --git a/lib/config/validation.spec.ts b/lib/config/validation.spec.ts
index 886fe77838..7699913c18 100644
--- a/lib/config/validation.spec.ts
+++ b/lib/config/validation.spec.ts
@@ -1,8 +1,7 @@
-import { getName } from '../../test/util';
 import type { RenovateConfig } from './types';
 import * as configValidation from './validation';
 
-describe(getName(), () => {
+describe('config/validation', () => {
   describe('getParentName()', () => {
     it('ignores encrypted in root', () => {
       expect(configValidation.getParentName('encrypted')).toEqual('');
diff --git a/lib/datasource/adoptium-java/index.spec.ts b/lib/datasource/adoptium-java/index.spec.ts
index f775b9fd0c..38d1f37dba 100644
--- a/lib/datasource/adoptium-java/index.spec.ts
+++ b/lib/datasource/adoptium-java/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import { datasource, defaultRegistryUrl, pageSize } from './common';
 
@@ -17,7 +17,7 @@ function* range(start: number, end: number): Generator<number, number, number> {
   yield* range(start + 1, end);
 }
 
-describe(getName(), () => {
+describe('datasource/adoptium-java/index', () => {
   describe('getReleases', () => {
     it('throws for error', async () => {
       httpMock
diff --git a/lib/datasource/bitbucket-tags/index.spec.ts b/lib/datasource/bitbucket-tags/index.spec.ts
index 89487dd107..ef011d6e13 100644
--- a/lib/datasource/bitbucket-tags/index.spec.ts
+++ b/lib/datasource/bitbucket-tags/index.spec.ts
@@ -1,11 +1,10 @@
 import { getDigest, getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { BitBucketTagsDatasource } from '.';
 
 const datasource = BitBucketTagsDatasource.id;
 
-describe(getName(), () => {
+describe('datasource/bitbucket-tags/index', () => {
   describe('getReleases', () => {
     it('returns tags from bitbucket cloud', async () => {
       const body = {
diff --git a/lib/datasource/cdnjs/index.spec.ts b/lib/datasource/cdnjs/index.spec.ts
index c7aed56bcd..7ef5d19b20 100644
--- a/lib/datasource/cdnjs/index.spec.ts
+++ b/lib/datasource/cdnjs/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import { CdnJsDatasource } from '.';
 
@@ -12,7 +12,7 @@ const baseUrl = 'https://api.cdnjs.com/';
 const pathFor = (s: string): string =>
   `/libraries/${s.split('/').shift()}?fields=homepage,repository,assets`;
 
-describe(getName(), () => {
+describe('datasource/cdnjs/index', () => {
   describe('getReleases', () => {
     beforeEach(() => {
       jest.clearAllMocks();
diff --git a/lib/datasource/clojure/index.spec.ts b/lib/datasource/clojure/index.spec.ts
index 8fa371a74e..dd93c0c82a 100644
--- a/lib/datasource/clojure/index.spec.ts
+++ b/lib/datasource/clojure/index.spec.ts
@@ -1,7 +1,7 @@
 import upath from 'upath';
 import { ReleaseResult, getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import * as hostRules from '../../util/host-rules';
 import { id as versioning } from '../../versioning/maven';
 import { ClojureDatasource } from '.';
@@ -78,7 +78,7 @@ function get(
   return getPkgReleases(registryUrls ? { ...conf, registryUrls } : conf);
 }
 
-describe(getName(), () => {
+describe('datasource/clojure/index', () => {
   beforeEach(() => {
     hostRules.add({
       hostType: ClojureDatasource.id,
diff --git a/lib/datasource/crate/index.spec.ts b/lib/datasource/crate/index.spec.ts
index 72f68b3bad..afaac1b826 100644
--- a/lib/datasource/crate/index.spec.ts
+++ b/lib/datasource/crate/index.spec.ts
@@ -5,7 +5,7 @@ import { DirectoryResult, dir } from 'tmp-promise';
 import { dirname, join } from 'upath';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import * as memCache from '../../util/cache/memory';
@@ -60,7 +60,7 @@ function setupErrorGitMock(): { mockClone: jest.Mock<any, any> } {
   return { mockClone };
 }
 
-describe(getName(), () => {
+describe('datasource/crate/index', () => {
   describe('getIndexSuffix', () => {
     it('returns correct suffixes', () => {
       expect(getIndexSuffix('a')).toStrictEqual(['1', 'a']);
diff --git a/lib/datasource/dart/index.spec.ts b/lib/datasource/dart/index.spec.ts
index 286ac8767d..fe7eda4e2a 100644
--- a/lib/datasource/dart/index.spec.ts
+++ b/lib/datasource/dart/index.spec.ts
@@ -1,13 +1,13 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadJsonFixture } from '../../../test/util';
+import { loadJsonFixture } from '../../../test/util';
 import { DartDatasource } from '.';
 
 const body = loadJsonFixture('shared_preferences.json');
 
 const baseUrl = 'https://pub.dartlang.org/api/packages/';
 
-describe(getName(), () => {
+describe('datasource/dart/index', () => {
   describe('getReleases', () => {
     it('returns null for empty result', async () => {
       httpMock.scope(baseUrl).get('/non_sense').reply(200, null);
diff --git a/lib/datasource/datasource.spec.ts b/lib/datasource/datasource.spec.ts
index 6a1255ff28..28630ff1b4 100644
--- a/lib/datasource/datasource.spec.ts
+++ b/lib/datasource/datasource.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../test/http-mock';
-import { getName } from '../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../constants/error-messages';
 import { Datasource } from './datasource';
 import type { GetReleasesConfig, ReleaseResult } from './types';
@@ -23,7 +22,7 @@ class TestDatasource extends Datasource {
   }
 }
 
-describe(getName(), () => {
+describe('datasource/datasource', () => {
   it('should throw on 429', async () => {
     const testDatasource = new TestDatasource();
 
diff --git a/lib/datasource/docker/common.spec.ts b/lib/datasource/docker/common.spec.ts
index 6c652b798a..d6d6e4d1e3 100644
--- a/lib/datasource/docker/common.spec.ts
+++ b/lib/datasource/docker/common.spec.ts
@@ -1,5 +1,5 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName, mocked } from '../../../test/util';
+import { mocked } from '../../../test/util';
 import * as _hostRules from '../../util/host-rules';
 import * as dockerCommon from './common';
 
@@ -8,7 +8,7 @@ const hostRules = mocked(_hostRules);
 jest.mock('@aws-sdk/client-ecr');
 jest.mock('../../util/host-rules');
 
-describe(getName(), () => {
+describe('datasource/docker/common', () => {
   beforeEach(() => {
     hostRules.find.mockReturnValue({
       username: 'some-username',
diff --git a/lib/datasource/docker/index.spec.ts b/lib/datasource/docker/index.spec.ts
index 965c272c86..7ed91d9312 100644
--- a/lib/datasource/docker/index.spec.ts
+++ b/lib/datasource/docker/index.spec.ts
@@ -1,7 +1,7 @@
 import * as _AWS from '@aws-sdk/client-ecr';
 import { getDigest, getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, mocked, partial } from '../../../test/util';
+import { mocked, partial } from '../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import * as _hostRules from '../../util/host-rules';
 import { id } from './common';
@@ -42,7 +42,7 @@ function mockEcrAuthReject(msg: string) {
   );
 }
 
-describe(getName(), () => {
+describe('datasource/docker/index', () => {
   beforeEach(() => {
     hostRules.find.mockReturnValue({
       username: 'some-username',
diff --git a/lib/datasource/galaxy-collection/index.spec.ts b/lib/datasource/galaxy-collection/index.spec.ts
index 9f1420a7ce..052a00404b 100644
--- a/lib/datasource/galaxy-collection/index.spec.ts
+++ b/lib/datasource/galaxy-collection/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import { GalaxyCollectionDatasource } from '.';
 
@@ -22,7 +22,7 @@ const baseUrl = 'https://galaxy.ansible.com';
 
 const datasource = GalaxyCollectionDatasource.id;
 
-describe(getName(), () => {
+describe('datasource/galaxy-collection/index', () => {
   describe('getReleases', () => {
     it('returns null for 404 result', async () => {
       httpMock.scope(baseUrl).get('/api/v2/collections/foo/bar/').reply(404);
diff --git a/lib/datasource/galaxy/index.spec.ts b/lib/datasource/galaxy/index.spec.ts
index fd499327e0..eed41ba018 100644
--- a/lib/datasource/galaxy/index.spec.ts
+++ b/lib/datasource/galaxy/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { GalaxyDatasource } from '.';
 
 const res1 = loadFixture('timezone');
@@ -8,7 +8,7 @@ const empty = loadFixture('empty');
 
 const baseUrl = 'https://galaxy.ansible.com/';
 
-describe(getName(), () => {
+describe('datasource/galaxy/index', () => {
   describe('getReleases', () => {
     it('returns null for empty result', async () => {
       httpMock
diff --git a/lib/datasource/git-refs/index.spec.ts b/lib/datasource/git-refs/index.spec.ts
index 744404ae92..ae0d31258d 100644
--- a/lib/datasource/git-refs/index.spec.ts
+++ b/lib/datasource/git-refs/index.spec.ts
@@ -1,6 +1,6 @@
 import _simpleGit from 'simple-git';
 import { getPkgReleases } from '..';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { id as datasource, getDigest } from '.';
 
 jest.mock('simple-git');
@@ -10,7 +10,7 @@ const depName = 'https://github.com/example/example.git';
 
 const lsRemote1 = loadFixture('ls-remote-1.txt');
 
-describe(getName(), () => {
+describe('datasource/git-refs/index', () => {
   describe('getReleases', () => {
     it('returns nil if response is wrong', async () => {
       simpleGit.mockReturnValue({
diff --git a/lib/datasource/git-tags/index.spec.ts b/lib/datasource/git-tags/index.spec.ts
index d1e347e2c9..6b05503946 100644
--- a/lib/datasource/git-tags/index.spec.ts
+++ b/lib/datasource/git-tags/index.spec.ts
@@ -1,6 +1,6 @@
 import _simpleGit from 'simple-git';
 import { getPkgReleases } from '..';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { id as datasource, getDigest } from '.';
 
 jest.mock('simple-git');
@@ -10,7 +10,7 @@ const depName = 'https://github.com/example/example.git';
 
 const lsRemote1 = loadFixture('ls-remote-1.txt', '../git-refs');
 
-describe(getName(), () => {
+describe('datasource/git-tags/index', () => {
   describe('getReleases', () => {
     it('returns nil if response is wrong', async () => {
       simpleGit.mockReturnValue({
diff --git a/lib/datasource/github-releases/common.spec.ts b/lib/datasource/github-releases/common.spec.ts
index 56081bfa64..ff01c64f15 100644
--- a/lib/datasource/github-releases/common.spec.ts
+++ b/lib/datasource/github-releases/common.spec.ts
@@ -1,8 +1,7 @@
-import { getName } from '../../../test/util';
 import { getApiBaseUrl, getGithubRelease, getSourceUrlBase } from './common';
 import { GitHubReleaseMocker } from './test';
 
-describe(getName(), () => {
+describe('datasource/github-releases/common', () => {
   describe('getSourceUrlBase', () => {
     it('ensures trailing slash', () => {
       const sourceUrl = getSourceUrlBase('https://gh.my-company.com');
diff --git a/lib/datasource/github-releases/digest.spec.ts b/lib/datasource/github-releases/digest.spec.ts
index af82b8ff10..dbedf63db7 100644
--- a/lib/datasource/github-releases/digest.spec.ts
+++ b/lib/datasource/github-releases/digest.spec.ts
@@ -1,11 +1,10 @@
 import hasha from 'hasha';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { findDigestAsset, mapDigestAssetToRelease } from './digest';
 import { GitHubReleaseMocker } from './test';
 import { DigestAsset } from './types';
 
-describe(getName(), () => {
+describe('datasource/github-releases/digest', () => {
   const lookupName = 'some/dep';
   const releaseMock = new GitHubReleaseMocker(
     'https://api.github.com',
diff --git a/lib/datasource/github-releases/index.spec.ts b/lib/datasource/github-releases/index.spec.ts
index 72f866134b..2f03c8ed18 100644
--- a/lib/datasource/github-releases/index.spec.ts
+++ b/lib/datasource/github-releases/index.spec.ts
@@ -1,6 +1,5 @@
 import { getDigest, getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import * as _hostRules from '../../util/host-rules';
 import { GitHubReleaseMocker } from './test';
 import { id as datasource } from '.';
@@ -24,7 +23,7 @@ const responseBody = [
   },
 ];
 
-describe(getName(), () => {
+describe('datasource/github-releases/index', () => {
   beforeEach(() => {
     hostRules.hosts.mockReturnValue([]);
     hostRules.find.mockReturnValue({
diff --git a/lib/datasource/github-tags/index.spec.ts b/lib/datasource/github-tags/index.spec.ts
index 26ad50fa7a..4b8edc4ab8 100644
--- a/lib/datasource/github-tags/index.spec.ts
+++ b/lib/datasource/github-tags/index.spec.ts
@@ -1,6 +1,5 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import * as _hostRules from '../../util/host-rules';
 import * as github from '.';
 
@@ -10,7 +9,7 @@ const hostRules: any = _hostRules;
 const githubApiHost = 'https://api.github.com';
 const githubEnterpriseApiHost = 'https://git.enterprise.com';
 
-describe(getName(), () => {
+describe('datasource/github-tags/index', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     hostRules.hosts = jest.fn(() => []);
diff --git a/lib/datasource/gitlab-tags/index.spec.ts b/lib/datasource/gitlab-tags/index.spec.ts
index c451a6a8b8..76ea7a5933 100644
--- a/lib/datasource/gitlab-tags/index.spec.ts
+++ b/lib/datasource/gitlab-tags/index.spec.ts
@@ -1,9 +1,8 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { id as datasource } from '.';
 
-describe(getName(), () => {
+describe('datasource/gitlab-tags/index', () => {
   describe('getReleases', () => {
     it('returns tags from custom registry', async () => {
       const body = [
diff --git a/lib/datasource/go/goproxy.spec.ts b/lib/datasource/go/goproxy.spec.ts
index 309579f36c..60cdf12c09 100644
--- a/lib/datasource/go/goproxy.spec.ts
+++ b/lib/datasource/go/goproxy.spec.ts
@@ -1,5 +1,5 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import * as memCache from '../../util/cache/memory';
 import {
   encodeCase,
@@ -9,7 +9,7 @@ import {
   versionInfo,
 } from './goproxy';
 
-describe(getName(), () => {
+describe('datasource/go/goproxy', () => {
   beforeEach(() => {
     memCache.init();
   });
diff --git a/lib/datasource/go/index.spec.ts b/lib/datasource/go/index.spec.ts
index 9cbf976e37..2ec6448601 100644
--- a/lib/datasource/go/index.spec.ts
+++ b/lib/datasource/go/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, logger, mocked } from '../../../test/util';
+import { logger, mocked } from '../../../test/util';
 import * as _hostRules from '../../util/host-rules';
 import { id as datasource, getDigest } from '.';
 
@@ -46,7 +46,7 @@ const resGitHubEnterprise = `<!DOCTYPE html>
 </body>
 </html>`;
 
-describe(getName(), () => {
+describe('datasource/go/index', () => {
   beforeEach(() => {
     hostRules.find.mockReturnValue({});
     hostRules.hosts.mockReturnValue([]);
diff --git a/lib/datasource/gradle-version/index.spec.ts b/lib/datasource/gradle-version/index.spec.ts
index 4da63d73df..6333e7b901 100644
--- a/lib/datasource/gradle-version/index.spec.ts
+++ b/lib/datasource/gradle-version/index.spec.ts
@@ -1,6 +1,6 @@
 import { GetPkgReleasesConfig, GetReleasesConfig, getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadJsonFixture, partial } from '../../../test/util';
+import { loadJsonFixture, partial } from '../../../test/util';
 import { ExternalHostError } from '../../types/errors/external-host-error';
 import { id as versioning } from '../../versioning/gradle';
 import { GradleVersionDatasource } from '.';
@@ -11,7 +11,7 @@ let config: GetPkgReleasesConfig;
 
 const datasource = GradleVersionDatasource.id;
 
-describe(getName(), () => {
+describe('datasource/gradle-version/index', () => {
   describe('getReleases', () => {
     beforeEach(() => {
       config = {
diff --git a/lib/datasource/helm/index.spec.ts b/lib/datasource/helm/index.spec.ts
index 1cb2105cec..051b5df29f 100644
--- a/lib/datasource/helm/index.spec.ts
+++ b/lib/datasource/helm/index.spec.ts
@@ -1,12 +1,12 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { HelmDatasource } from '.';
 
 // Truncated index.yaml file
 const indexYaml = loadFixture('index.yaml');
 
-describe(getName(), () => {
+describe('datasource/helm/index', () => {
   describe('getReleases', () => {
     beforeEach(() => {
       jest.resetAllMocks();
diff --git a/lib/datasource/hex/index.spec.ts b/lib/datasource/hex/index.spec.ts
index 4e6ad86586..bbc8a30f9b 100644
--- a/lib/datasource/hex/index.spec.ts
+++ b/lib/datasource/hex/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, hostRules, loadJsonFixture } from '../../../test/util';
+import { hostRules, loadJsonFixture } from '../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import { HexDatasource } from '.';
 
@@ -12,7 +12,7 @@ jest.mock('../../util/host-rules');
 const baseUrl = 'https://hex.pm/api';
 const datasource = HexDatasource.id;
 
-describe(getName(), () => {
+describe('datasource/hex/index', () => {
   beforeEach(() => {
     hostRules.hosts.mockReturnValue([]);
     hostRules.find.mockReturnValue({});
diff --git a/lib/datasource/index.spec.ts b/lib/datasource/index.spec.ts
index 9746d3b408..1d3f6fa3cd 100644
--- a/lib/datasource/index.spec.ts
+++ b/lib/datasource/index.spec.ts
@@ -1,5 +1,5 @@
 import * as httpMock from '../../test/http-mock';
-import { getName, logger, mocked } from '../../test/util';
+import { logger, mocked } from '../../test/util';
 import {
   EXTERNAL_HOST_ERROR,
   HOST_DISABLED,
@@ -26,7 +26,7 @@ const mavenDatasource = mocked(datasourceMaven);
 const npmDatasource = mocked(datasourceNpm);
 const packagistDatasource = mocked(datasourcePackagist);
 
-describe(getName(), () => {
+describe('datasource/index', () => {
   beforeEach(() => {
     jest.resetAllMocks();
   });
diff --git a/lib/datasource/jenkins-plugins/index.spec.ts b/lib/datasource/jenkins-plugins/index.spec.ts
index 8a2e7eb9a6..9057c64438 100644
--- a/lib/datasource/jenkins-plugins/index.spec.ts
+++ b/lib/datasource/jenkins-plugins/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadJsonFixture } from '../../../test/util';
+import { loadJsonFixture } from '../../../test/util';
 import * as versioning from '../../versioning/docker';
 import { resetCache } from './get';
 import * as jenkins from '.';
@@ -8,7 +8,7 @@ import * as jenkins from '.';
 const jenkinsPluginsVersions = loadJsonFixture('plugin-versions.json');
 const jenkinsPluginsInfo = loadJsonFixture('update-center.actual.json');
 
-describe(getName(), () => {
+describe('datasource/jenkins-plugins/index', () => {
   describe('getReleases', () => {
     const SKIP_CACHE = process.env.RENOVATE_SKIP_CACHE;
 
diff --git a/lib/datasource/maven/index.spec.ts b/lib/datasource/maven/index.spec.ts
index e610a5cc68..a0f01050dd 100644
--- a/lib/datasource/maven/index.spec.ts
+++ b/lib/datasource/maven/index.spec.ts
@@ -1,6 +1,6 @@
 import { ReleaseResult, getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import * as hostRules from '../../util/host-rules';
 import { id as versioning } from '../../versioning/maven';
@@ -74,7 +74,7 @@ function get(
   return getPkgReleases(registryUrls ? { ...conf, registryUrls } : conf);
 }
 
-describe(getName(), () => {
+describe('datasource/maven/index', () => {
   beforeEach(() => {
     hostRules.add({
       hostType: datasource,
diff --git a/lib/datasource/metadata.spec.ts b/lib/datasource/metadata.spec.ts
index eb27c5e7a7..7a05cc72f9 100644
--- a/lib/datasource/metadata.spec.ts
+++ b/lib/datasource/metadata.spec.ts
@@ -1,11 +1,10 @@
-import { getName } from '../../test/util';
 import * as datasourceMaven from './maven';
 import { addMetaData } from './metadata';
 import * as datasourceNpm from './npm';
 import { PypiDatasource } from './pypi';
 import type { ReleaseResult } from './types';
 
-describe(getName(), () => {
+describe('datasource/metadata', () => {
   it('Should do nothing if dep is not specified', () => {
     expect(addMetaData()).toBeUndefined();
   });
diff --git a/lib/datasource/npm/get.spec.ts b/lib/datasource/npm/get.spec.ts
index 649498bfef..e8d0e3b9e7 100644
--- a/lib/datasource/npm/get.spec.ts
+++ b/lib/datasource/npm/get.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { ExternalHostError } from '../../types/errors/external-host-error';
 import * as hostRules from '../../util/host-rules';
 import { getDependency, resetMemCache } from './get';
@@ -11,7 +10,7 @@ function getPath(s = ''): string {
   return `${prePath}/@myco%2Ftest`;
 }
 
-describe(getName(), () => {
+describe('datasource/npm/get', () => {
   beforeEach(() => {
     jest.clearAllMocks();
     resetMemCache();
diff --git a/lib/datasource/npm/index.spec.ts b/lib/datasource/npm/index.spec.ts
index 5b46729552..ae42c4af4c 100644
--- a/lib/datasource/npm/index.spec.ts
+++ b/lib/datasource/npm/index.spec.ts
@@ -2,7 +2,6 @@ import mockDate from 'mockdate';
 import _registryAuthToken from 'registry-auth-token';
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import * as hostRules from '../../util/host-rules';
@@ -15,7 +14,7 @@ const registryAuthToken: jest.Mock<_registryAuthToken.NpmCredentials> =
   _registryAuthToken as never;
 let npmResponse: any;
 
-describe(getName(), () => {
+describe('datasource/npm/index', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     setGlobalConfig();
diff --git a/lib/datasource/npm/npmrc.spec.ts b/lib/datasource/npm/npmrc.spec.ts
index c25ecc370a..a013f823bf 100644
--- a/lib/datasource/npm/npmrc.spec.ts
+++ b/lib/datasource/npm/npmrc.spec.ts
@@ -1,4 +1,4 @@
-import { getName, mocked } from '../../../test/util';
+import { mocked } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import * as _sanitize from '../../util/sanitize';
 import { getNpmrc, setNpmrc } from './npmrc';
@@ -7,7 +7,7 @@ jest.mock('../../util/sanitize');
 
 const sanitize = mocked(_sanitize);
 
-describe(getName(), () => {
+describe('datasource/npm/npmrc', () => {
   beforeEach(() => {
     setNpmrc('');
     setGlobalConfig();
diff --git a/lib/datasource/nuget/index.spec.ts b/lib/datasource/nuget/index.spec.ts
index 61091a9ccc..d6832c7035 100644
--- a/lib/datasource/nuget/index.spec.ts
+++ b/lib/datasource/nuget/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import * as _hostRules from '../../util/host-rules';
 import { id as versioning } from '../../versioning/nuget';
 import { id as datasource, parseRegistryUrl } from '.';
@@ -90,7 +90,7 @@ const configV3Multiple = {
   ],
 };
 
-describe(getName(), () => {
+describe('datasource/nuget/index', () => {
   describe('parseRegistryUrl', () => {
     beforeEach(() => {
       jest.resetAllMocks();
diff --git a/lib/datasource/orb/index.spec.ts b/lib/datasource/orb/index.spec.ts
index 4d8feff266..57f1aa678b 100644
--- a/lib/datasource/orb/index.spec.ts
+++ b/lib/datasource/orb/index.spec.ts
@@ -1,6 +1,5 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { OrbDatasource } from '.';
 
 const orbData = {
@@ -28,7 +27,7 @@ const baseUrl = 'https://circleci.com';
 
 const datasource = OrbDatasource.id;
 
-describe(getName(), () => {
+describe('datasource/orb/index', () => {
   describe('getReleases', () => {
     beforeEach(() => {
       jest.clearAllMocks();
diff --git a/lib/datasource/packagist/index.spec.ts b/lib/datasource/packagist/index.spec.ts
index 57f7536b43..a4e083e2d7 100644
--- a/lib/datasource/packagist/index.spec.ts
+++ b/lib/datasource/packagist/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadJsonFixture } from '../../../test/util';
+import { loadJsonFixture } from '../../../test/util';
 import * as _hostRules from '../../util/host-rules';
 import * as composerVersioning from '../../versioning/composer';
 import { id as versioning } from '../../versioning/loose';
@@ -16,7 +16,7 @@ const mailchimpJson: any = loadJsonFixture('mailchimp-api.json');
 
 const baseUrl = 'https://packagist.org';
 
-describe(getName(), () => {
+describe('datasource/packagist/index', () => {
   describe('getReleases', () => {
     let config: any;
     beforeEach(() => {
diff --git a/lib/datasource/pod/index.spec.ts b/lib/datasource/pod/index.spec.ts
index b246373338..28d681b3fd 100644
--- a/lib/datasource/pod/index.spec.ts
+++ b/lib/datasource/pod/index.spec.ts
@@ -1,6 +1,5 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import * as rubyVersioning from '../../versioning/ruby';
 import * as pod from '.';
@@ -15,7 +14,7 @@ const config = {
 const githubApiHost = 'https://api.github.com';
 const cocoapodsHost = 'https://cdn.cocoapods.org';
 
-describe(getName(), () => {
+describe('datasource/pod/index', () => {
   describe('getReleases', () => {
     beforeEach(() => {
       jest.resetAllMocks();
diff --git a/lib/datasource/pypi/index.spec.ts b/lib/datasource/pypi/index.spec.ts
index 4e06b1316e..26dd29f566 100644
--- a/lib/datasource/pypi/index.spec.ts
+++ b/lib/datasource/pypi/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import * as hostRules from '../../util/host-rules';
 import { PypiDatasource } from '.';
 
@@ -16,7 +16,7 @@ const mixedHyphensResponse = loadFixture('versions-html-mixed-hyphens.html');
 const baseUrl = 'https://pypi.org/pypi';
 const datasource = PypiDatasource.id;
 
-describe(getName(), () => {
+describe('datasource/pypi/index', () => {
   describe('getReleases', () => {
     const OLD_ENV = process.env;
 
diff --git a/lib/datasource/repology/index.spec.ts b/lib/datasource/repology/index.spec.ts
index f984ac7bd8..caaa3a0619 100644
--- a/lib/datasource/repology/index.spec.ts
+++ b/lib/datasource/repology/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import { id as versioning } from '../../versioning/loose';
 import type { RepologyPackage } from './types';
@@ -52,7 +52,7 @@ const fixtureGcc = loadFixture(`gcc.json`);
 const fixturePulseaudio = loadFixture(`pulseaudio.json`);
 const fixtureJdk = loadFixture(`openjdk.json`);
 
-describe(getName(), () => {
+describe('datasource/repology/index', () => {
   describe('getReleases', () => {
     it('returns null for empty result', async () => {
       mockResolverCall('debian_stable', 'nginx', 'binname', {
diff --git a/lib/datasource/ruby-version/index.spec.ts b/lib/datasource/ruby-version/index.spec.ts
index a4e94ce0b5..26ba55c1de 100644
--- a/lib/datasource/ruby-version/index.spec.ts
+++ b/lib/datasource/ruby-version/index.spec.ts
@@ -1,13 +1,13 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { RubyVersionDatasource } from '.';
 
 const rubyReleasesHtml = loadFixture('releases.html');
 
 const datasource = RubyVersionDatasource.id;
 
-describe(getName(), () => {
+describe('datasource/ruby-version/index', () => {
   describe('getReleases', () => {
     it('parses real data', async () => {
       httpMock
diff --git a/lib/datasource/rubygems/index.spec.ts b/lib/datasource/rubygems/index.spec.ts
index 8d935229cc..cd213d66b1 100644
--- a/lib/datasource/rubygems/index.spec.ts
+++ b/lib/datasource/rubygems/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture, loadJsonFixture } from '../../../test/util';
+import { loadFixture, loadJsonFixture } from '../../../test/util';
 import * as rubyVersioning from '../../versioning/ruby';
 import { resetCache } from './get-rubygems-org';
 import * as rubygems from '.';
@@ -9,7 +9,7 @@ const rubygemsOrgVersions = loadFixture('rubygems-org.txt');
 const railsInfo = loadJsonFixture('rails/info.json');
 const railsVersions = loadJsonFixture('rails/versions.json');
 
-describe(getName(), () => {
+describe('datasource/rubygems/index', () => {
   describe('getReleases', () => {
     const SKIP_CACHE = process.env.RENOVATE_SKIP_CACHE;
 
diff --git a/lib/datasource/sbt-package/index.spec.ts b/lib/datasource/sbt-package/index.spec.ts
index 93be280383..a1021129fc 100644
--- a/lib/datasource/sbt-package/index.spec.ts
+++ b/lib/datasource/sbt-package/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import * as mavenVersioning from '../../versioning/maven';
 import { MAVEN_REPO } from '../maven/common';
 import { parseIndexDir } from '../sbt-plugin/util';
@@ -9,7 +9,7 @@ import * as sbtPackage from '.';
 const mavenIndexHtml = loadFixture(`maven-index.html`);
 const sbtPluginIndex = loadFixture(`sbt-plugins-index.html`);
 
-describe(getName(), () => {
+describe('datasource/sbt-package/index', () => {
   it('parses Maven index directory', () => {
     expect(parseIndexDir(mavenIndexHtml)).toMatchSnapshot();
   });
diff --git a/lib/datasource/sbt-plugin/index.spec.ts b/lib/datasource/sbt-plugin/index.spec.ts
index aa57f43830..805a629bc4 100644
--- a/lib/datasource/sbt-plugin/index.spec.ts
+++ b/lib/datasource/sbt-plugin/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import * as mavenVersioning from '../../versioning/maven';
 import { MAVEN_REPO } from '../maven/common';
 import { parseIndexDir } from './util';
@@ -9,7 +9,7 @@ import * as sbtPlugin from '.';
 const mavenIndexHtml = loadFixture(`maven-index.html`);
 const sbtPluginIndex = loadFixture(`sbt-plugins-index.html`);
 
-describe(getName(), () => {
+describe('datasource/sbt-plugin/index', () => {
   it('parses Maven index directory', () => {
     expect(parseIndexDir(mavenIndexHtml)).toMatchSnapshot();
   });
diff --git a/lib/datasource/terraform-module/index.spec.ts b/lib/datasource/terraform-module/index.spec.ts
index c9576339b3..721b84712e 100644
--- a/lib/datasource/terraform-module/index.spec.ts
+++ b/lib/datasource/terraform-module/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { TerraformModuleDatasource } from '.';
 
 const consulData: any = loadFixture('registry-consul.json');
@@ -13,7 +13,7 @@ const datasource = TerraformModuleDatasource.id;
 const baseUrl = 'https://registry.terraform.io';
 const localTerraformEnterprisebaseUrl = 'https://terraform.foo.bar';
 
-describe(getName(), () => {
+describe('datasource/terraform-module/index', () => {
   describe('getReleases', () => {
     beforeEach(() => {
       jest.clearAllMocks();
diff --git a/lib/datasource/terraform-provider/index.spec.ts b/lib/datasource/terraform-provider/index.spec.ts
index 836e57be2a..db274e1987 100644
--- a/lib/datasource/terraform-provider/index.spec.ts
+++ b/lib/datasource/terraform-provider/index.spec.ts
@@ -1,6 +1,6 @@
 import { getPkgReleases } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { TerraformProviderDatasource } from '.';
 
 const consulData: any = loadFixture('azurerm-provider.json');
@@ -14,7 +14,7 @@ const terraformProviderDatasource = new TerraformProviderDatasource();
 const primaryUrl = terraformProviderDatasource.defaultRegistryUrls[0];
 const secondaryUrl = terraformProviderDatasource.defaultRegistryUrls[1];
 
-describe(getName(), () => {
+describe('datasource/terraform-provider/index', () => {
   describe('getReleases', () => {
     it('returns null for empty result', async () => {
       httpMock
diff --git a/lib/logger/__snapshots__/index.spec.ts.snap b/lib/logger/__snapshots__/index.spec.ts.snap
index 281280bb59..ffbe479d6d 100644
--- a/lib/logger/__snapshots__/index.spec.ts.snap
+++ b/lib/logger/__snapshots__/index.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`logger saves problems 1`] = `
+exports[`logger/index saves problems 1`] = `
 Array [
   Object {
     "any": "test",
diff --git a/lib/logger/config-serializer.spec.ts b/lib/logger/config-serializer.spec.ts
index 27912e1df3..8a0e53b35e 100644
--- a/lib/logger/config-serializer.spec.ts
+++ b/lib/logger/config-serializer.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../test/util';
 import configSerializer from './config-serializer';
 
-describe(getName(), () => {
+describe('logger/config-serializer', () => {
   it('squashes templates', () => {
     const config = {
       nottoken: 'b',
diff --git a/lib/logger/err-serializer.spec.ts b/lib/logger/err-serializer.spec.ts
index 13d43a03cd..61ef795e29 100644
--- a/lib/logger/err-serializer.spec.ts
+++ b/lib/logger/err-serializer.spec.ts
@@ -1,11 +1,11 @@
 import * as httpMock from '../../test/http-mock';
-import { getName, partial } from '../../test/util';
+import { partial } from '../../test/util';
 import * as hostRules from '../util/host-rules';
 import { Http } from '../util/http';
 import errSerializer from './err-serializer';
 import { sanitizeValue } from './utils';
 
-describe(getName(), () => {
+describe('logger/err-serializer', () => {
   it('expands errors', () => {
     const err = partial<Error & Record<string, unknown>>({
       a: 1,
diff --git a/lib/logger/index.spec.ts b/lib/logger/index.spec.ts
index 8778a5715a..abae2299f0 100644
--- a/lib/logger/index.spec.ts
+++ b/lib/logger/index.spec.ts
@@ -19,7 +19,7 @@ jest.unmock('.');
 jest.mock('fs-extra');
 const fs: any = _fs;
 
-describe('logger', () => {
+describe('logger/index', () => {
   it('inits', () => {
     expect(logger).toBeDefined();
   });
diff --git a/lib/logger/pretty-stdout.spec.ts b/lib/logger/pretty-stdout.spec.ts
index 8c5d049a49..67848e4320 100644
--- a/lib/logger/pretty-stdout.spec.ts
+++ b/lib/logger/pretty-stdout.spec.ts
@@ -1,5 +1,4 @@
 import chalk from 'chalk';
-import { getName } from '../../test/util';
 import * as prettyStdout from './pretty-stdout';
 import type { BunyanRecord } from './types';
 
@@ -10,7 +9,7 @@ jest.mock('chalk', () =>
   )
 );
 
-describe(getName(), () => {
+describe('logger/pretty-stdout', () => {
   describe('getMeta(rec)', () => {
     it('returns empty string if null rec', () => {
       expect(prettyStdout.getMeta(null as any)).toEqual('');
diff --git a/lib/manager/ansible-galaxy/extract.spec.ts b/lib/manager/ansible-galaxy/extract.spec.ts
index 0d3ef20bb9..960e6f8ea3 100644
--- a/lib/manager/ansible-galaxy/extract.spec.ts
+++ b/lib/manager/ansible-galaxy/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import extractPackageFile, { getSliceEndNumber } from './extract';
 
 const yamlFile1 = loadFixture('requirements01.yml');
@@ -8,7 +8,7 @@ const collections1 = loadFixture('collections1.yml');
 const collections2 = loadFixture('collections2.yml');
 const galaxy = loadFixture('galaxy.yml');
 
-describe(getName(), () => {
+describe('manager/ansible-galaxy/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('nothing here', 'requirements.yml')).toBeNull();
diff --git a/lib/manager/ansible/extract.spec.ts b/lib/manager/ansible/extract.spec.ts
index 3c61a5808c..f7217a3500 100644
--- a/lib/manager/ansible/extract.spec.ts
+++ b/lib/manager/ansible/extract.spec.ts
@@ -1,10 +1,10 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import extractPackageFile from './extract';
 
 const yamlFile1 = loadFixture('main1.yaml');
 const yamlFile2 = loadFixture('main2.yaml');
 
-describe(getName(), () => {
+describe('manager/ansible/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('nothing here')).toBeNull();
diff --git a/lib/manager/argocd/extract.spec.ts b/lib/manager/argocd/extract.spec.ts
index 1160b6b95f..ad0289b2b1 100644
--- a/lib/manager/argocd/extract.spec.ts
+++ b/lib/manager/argocd/extract.spec.ts
@@ -1,11 +1,11 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const validApplication = loadFixture('validApplication.yml');
 const malformedApplication = loadFixture('malformedApplications.yml');
 const randomManifest = loadFixture('randomManifest.yml');
 
-describe(getName(), () => {
+describe('manager/argocd/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('nothing here', 'applications.yml')).toBeNull();
diff --git a/lib/manager/azure-pipelines/extract.spec.ts b/lib/manager/azure-pipelines/extract.spec.ts
index cf96d37f0c..e0b6ca9e20 100644
--- a/lib/manager/azure-pipelines/extract.spec.ts
+++ b/lib/manager/azure-pipelines/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import {
   extractContainer,
   extractPackageFile,
@@ -14,7 +14,7 @@ const azurePipelinesNoDependency = loadFixture(
   'azure-pipelines-no-dependency.yaml'
 );
 
-describe(getName(), () => {
+describe('manager/azure-pipelines/extract', () => {
   it('should parse a valid azure-pipelines file', () => {
     const file = parseAzurePipelines(azurePipelines, 'some-file');
     expect(file).not.toBeNull();
diff --git a/lib/manager/batect-wrapper/artifacts.spec.ts b/lib/manager/batect-wrapper/artifacts.spec.ts
index 085cabdf87..7ab182b058 100644
--- a/lib/manager/batect-wrapper/artifacts.spec.ts
+++ b/lib/manager/batect-wrapper/artifacts.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import type { UpdateArtifact } from '../types';
 import { updateArtifacts } from './artifacts';
 
@@ -25,7 +24,7 @@ function artifactForPath(
   };
 }
 
-describe(getName(), () => {
+describe('manager/batect-wrapper/artifacts', () => {
   beforeEach(() => {
     httpMock
       .scope('https://github.com')
diff --git a/lib/manager/batect-wrapper/extract.spec.ts b/lib/manager/batect-wrapper/extract.spec.ts
index 6735e3c654..d905ac5275 100644
--- a/lib/manager/batect-wrapper/extract.spec.ts
+++ b/lib/manager/batect-wrapper/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { id as githubReleaseDatasource } from '../../datasource/github-releases';
 import { id as semverVersioning } from '../../versioning/semver';
 import type { PackageDependency } from '../types';
@@ -7,7 +7,7 @@ import { extractPackageFile } from './extract';
 const validWrapperContent = loadFixture('valid-wrapper');
 const malformedWrapperContent = loadFixture('malformed-wrapper');
 
-describe(getName(), () => {
+describe('manager/batect-wrapper/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty wrapper file', () => {
       expect(extractPackageFile('')).toBeNull();
diff --git a/lib/manager/batect/extract.spec.ts b/lib/manager/batect/extract.spec.ts
index cd6df449d0..09da6465c5 100644
--- a/lib/manager/batect/extract.spec.ts
+++ b/lib/manager/batect/extract.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import { id as gitTagDatasource } from '../../datasource/git-tags';
@@ -33,7 +32,7 @@ const adminConfig: RepoGlobalConfig = {
 
 const config: ExtractConfig = {};
 
-describe(getName(), () => {
+describe('manager/batect/extract', () => {
   describe('extractPackageFile()', () => {
     beforeEach(() => {
       setGlobalConfig(adminConfig);
diff --git a/lib/manager/bazel/extract.spec.ts b/lib/manager/bazel/extract.spec.ts
index 919b954b04..f9514ca53c 100644
--- a/lib/manager/bazel/extract.spec.ts
+++ b/lib/manager/bazel/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const workspaceFile = loadFixture('WORKSPACE1');
@@ -6,7 +6,7 @@ const workspace2File = loadFixture('WORKSPACE2');
 const workspace3File = loadFixture('WORKSPACE3');
 const fileWithBzlExtension = loadFixture('repositories.bzl');
 
-describe(getName(), () => {
+describe('manager/bazel/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns empty if fails to parse', () => {
       const res = extractPackageFile('blahhhhh:foo:@what\n');
diff --git a/lib/manager/bazel/update.spec.ts b/lib/manager/bazel/update.spec.ts
index 9d5e913d1a..a4d7d4f38f 100644
--- a/lib/manager/bazel/update.spec.ts
+++ b/lib/manager/bazel/update.spec.ts
@@ -1,6 +1,6 @@
 import { Readable } from 'stream';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import type { UpdateType } from '../../config/types';
 import { updateDependency } from './update';
 
@@ -16,7 +16,7 @@ git_repository(
 )
 */
 
-describe(getName(), () => {
+describe('manager/bazel/update', () => {
   describe('updateDependency', () => {
     beforeEach(() => {
       jest.resetAllMocks();
diff --git a/lib/manager/buildkite/extract.spec.ts b/lib/manager/buildkite/extract.spec.ts
index f49d3405c7..43dd8140be 100644
--- a/lib/manager/buildkite/extract.spec.ts
+++ b/lib/manager/buildkite/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const pipeline1 = loadFixture('pipeline1.yml');
@@ -6,7 +6,7 @@ const pipeline2 = loadFixture('pipeline2.yml');
 const pipeline3 = loadFixture('pipeline3.yml');
 const pipeline4 = loadFixture('pipeline4.yml');
 
-describe(getName(), () => {
+describe('manager/buildkite/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('nothing here')).toBeNull();
diff --git a/lib/manager/bundler/__snapshots__/artifacts.spec.ts.snap b/lib/manager/bundler/__snapshots__/artifacts.spec.ts.snap
index 03d956dd1f..cd52e3f950 100644
--- a/lib/manager/bundler/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/bundler/__snapshots__/artifacts.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`bundler.updateArtifacts() Docker .ruby-version 1`] = `
+exports[`manager/bundler/artifacts Docker .ruby-version 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/ruby:1.2.0",
@@ -36,7 +36,7 @@ Array [
 ]
 `;
 
-exports[`bundler.updateArtifacts() Docker constraints options 1`] = `
+exports[`manager/bundler/artifacts Docker constraints options 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/ruby:latest",
@@ -72,7 +72,7 @@ Array [
 ]
 `;
 
-exports[`bundler.updateArtifacts() Docker injects bundler host configuration as command with bundler < 2 1`] = `
+exports[`manager/bundler/artifacts Docker injects bundler host configuration as command with bundler < 2 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/ruby:1.2.0",
@@ -108,7 +108,7 @@ Array [
 ]
 `;
 
-exports[`bundler.updateArtifacts() Docker injects bundler host configuration as command with bundler == latest 1`] = `
+exports[`manager/bundler/artifacts Docker injects bundler host configuration as command with bundler == latest 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/ruby:1.2.0",
@@ -144,7 +144,7 @@ Array [
 ]
 `;
 
-exports[`bundler.updateArtifacts() Docker injects bundler host configuration as command with bundler >= 2 1`] = `
+exports[`manager/bundler/artifacts Docker injects bundler host configuration as command with bundler >= 2 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/ruby:1.2.0",
@@ -180,7 +180,7 @@ Array [
 ]
 `;
 
-exports[`bundler.updateArtifacts() Docker injects bundler host configuration environment variables 1`] = `
+exports[`manager/bundler/artifacts Docker injects bundler host configuration environment variables 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/ruby:1.2.0",
@@ -217,7 +217,7 @@ Array [
 ]
 `;
 
-exports[`bundler.updateArtifacts() Docker invalid constraints options 1`] = `
+exports[`manager/bundler/artifacts Docker invalid constraints options 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/ruby:latest",
@@ -253,7 +253,7 @@ Array [
 ]
 `;
 
-exports[`bundler.updateArtifacts() performs lockFileMaintenance 1`] = `
+exports[`manager/bundler/artifacts performs lockFileMaintenance 1`] = `
 Array [
   Object {
     "cmd": "bundle lock",
@@ -277,7 +277,7 @@ Array [
 ]
 `;
 
-exports[`bundler.updateArtifacts() returns error when failing in lockFileMaintenance true 1`] = `
+exports[`manager/bundler/artifacts returns error when failing in lockFileMaintenance true 1`] = `
 Array [
   Object {
     "artifactError": Object {
@@ -289,7 +289,7 @@ Array [
 ]
 `;
 
-exports[`bundler.updateArtifacts() returns error when failing in lockFileMaintenance true 2`] = `
+exports[`manager/bundler/artifacts returns error when failing in lockFileMaintenance true 2`] = `
 Array [
   Object {
     "cmd": "bundle lock",
@@ -313,7 +313,7 @@ Array [
 ]
 `;
 
-exports[`bundler.updateArtifacts() returns null if Gemfile.lock was not changed 1`] = `
+exports[`manager/bundler/artifacts returns null if Gemfile.lock was not changed 1`] = `
 Array [
   Object {
     "cmd": "bundle lock --update foo bar",
@@ -337,7 +337,7 @@ Array [
 ]
 `;
 
-exports[`bundler.updateArtifacts() works explicit global binarySource 1`] = `
+exports[`manager/bundler/artifacts works explicit global binarySource 1`] = `
 Array [
   Object {
     "cmd": "bundle lock --update foo bar",
@@ -361,7 +361,7 @@ Array [
 ]
 `;
 
-exports[`bundler.updateArtifacts() works for default binarySource 1`] = `
+exports[`manager/bundler/artifacts works for default binarySource 1`] = `
 Array [
   Object {
     "cmd": "bundle lock --update foo bar",
diff --git a/lib/manager/bundler/__snapshots__/gemfile.spec.ts.snap b/lib/manager/bundler/__snapshots__/gemfile.spec.ts.snap
index 8ff55a1d44..ae0c3b56d4 100644
--- a/lib/manager/bundler/__snapshots__/gemfile.spec.ts.snap
+++ b/lib/manager/bundler/__snapshots__/gemfile.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`extract lib/manager/bundler/gemfile.rails.lock matches the expected output 1`] = `
+exports[`manager/bundler/gemfile matches the expected output 1`] = `
 Map {
   "activerecord-jdbc-adapter" => "52.1-java",
   "activerecord-jdbcmysql-adapter" => "52.1-java",
diff --git a/lib/manager/bundler/__snapshots__/locked-version.spec.ts.snap b/lib/manager/bundler/__snapshots__/locked-version.spec.ts.snap
index 5b3fe52411..aef1101f49 100644
--- a/lib/manager/bundler/__snapshots__/locked-version.spec.ts.snap
+++ b/lib/manager/bundler/__snapshots__/locked-version.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/lib/manager/bundler/locked-version Parse Gitlab Foss Gem Lock File 1`] = `
+exports[`manager/bundler/locked-version Parse Gitlab Foss Gem Lock File 1`] = `
 Map {
   "RedCloth" => "4.3.2",
   "abstract_type" => "0.0.7",
@@ -483,7 +483,7 @@ Map {
 }
 `;
 
-exports[`/lib/manager/bundler/locked-version Parse Mastodon Gem Lock File 1`] = `
+exports[`manager/bundler/locked-version Parse Mastodon Gem Lock File 1`] = `
 Map {
   "actioncable" => "5.2.4.1",
   "actionmailer" => "5.2.4.1",
@@ -754,7 +754,7 @@ Map {
 }
 `;
 
-exports[`/lib/manager/bundler/locked-version Parse Rails Gem Lock File 1`] = `
+exports[`manager/bundler/locked-version Parse Rails Gem Lock File 1`] = `
 Map {
   "activerecord-jdbc-adapter" => "52.1-java",
   "activerecord-jdbcmysql-adapter" => "52.1-java",
@@ -944,7 +944,7 @@ Map {
 }
 `;
 
-exports[`/lib/manager/bundler/locked-version Parse Ruby CI Gem Lock File 1`] = `
+exports[`manager/bundler/locked-version Parse Ruby CI Gem Lock File 1`] = `
 Map {
   "actioncable" => "5.2.3",
   "actionmailer" => "5.2.3",
@@ -1013,7 +1013,7 @@ Map {
 }
 `;
 
-exports[`/lib/manager/bundler/locked-version Parse WebPacker Gem Lock File 1`] = `
+exports[`manager/bundler/locked-version Parse WebPacker Gem Lock File 1`] = `
 Map {
   "actioncable" => "6.0.1",
   "actionmailbox" => "6.0.1",
diff --git a/lib/manager/bundler/artifacts.spec.ts b/lib/manager/bundler/artifacts.spec.ts
index c06e29a36c..a13202422d 100644
--- a/lib/manager/bundler/artifacts.spec.ts
+++ b/lib/manager/bundler/artifacts.spec.ts
@@ -41,7 +41,7 @@ const updatedGemfileLock = {
   },
 };
 
-describe('bundler.updateArtifacts()', () => {
+describe('manager/bundler/artifacts', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     jest.resetModules();
diff --git a/lib/manager/bundler/extract.spec.ts b/lib/manager/bundler/extract.spec.ts
index c02f69cf23..7548328d52 100644
--- a/lib/manager/bundler/extract.spec.ts
+++ b/lib/manager/bundler/extract.spec.ts
@@ -1,4 +1,4 @@
-import { fs, getName, loadFixture } from '../../../test/util';
+import { fs, loadFixture } from '../../../test/util';
 import { isValid } from '../../versioning/ruby';
 import { extractPackageFile } from './extract';
 
@@ -31,7 +31,7 @@ function validateGems(raw, parsed) {
   expect(gemfileGemCount).toEqual(parsedGemCount);
 }
 
-describe(getName(), () => {
+describe('manager/bundler/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', async () => {
       expect(await extractPackageFile('nothing here', 'Gemfile')).toBeNull();
diff --git a/lib/manager/bundler/gemfile.spec.ts b/lib/manager/bundler/gemfile.spec.ts
index 74485bd4f7..6d6dfc8ec4 100644
--- a/lib/manager/bundler/gemfile.spec.ts
+++ b/lib/manager/bundler/gemfile.spec.ts
@@ -3,7 +3,7 @@ import { extractLockFileEntries } from './locked-version';
 
 const gemLockFile = loadFixture('Gemfile.rails.lock');
 
-describe('extract lib/manager/bundler/gemfile.rails.lock', () => {
+describe('manager/bundler/gemfile', () => {
   it('matches the expected output', () => {
     const res = extractLockFileEntries(gemLockFile);
     expect(res.size).toEqual(185);
diff --git a/lib/manager/bundler/host-rules.spec.ts b/lib/manager/bundler/host-rules.spec.ts
index bc8ca325b5..3aa78358a3 100644
--- a/lib/manager/bundler/host-rules.spec.ts
+++ b/lib/manager/bundler/host-rules.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../../test/util';
 import { HostRule } from '../../types';
 import { add, clear } from '../../util/host-rules';
 
@@ -7,7 +6,7 @@ import {
   getAuthenticationHeaderValue,
 } from './host-rules';
 
-describe(getName(), () => {
+describe('manager/bundler/host-rules', () => {
   beforeEach(() => {
     clear();
   });
diff --git a/lib/manager/bundler/locked-version.spec.ts b/lib/manager/bundler/locked-version.spec.ts
index d2fee8a097..6921b83bd2 100644
--- a/lib/manager/bundler/locked-version.spec.ts
+++ b/lib/manager/bundler/locked-version.spec.ts
@@ -7,7 +7,7 @@ const mastodonGemfileLock = loadFixture('Gemfile.mastodon.lock');
 const rubyCIGemfileLock = loadFixture('Gemfile.rubyci.lock');
 const gitlabFossGemfileLock = loadFixture('Gemfile.gitlab-foss.lock');
 
-describe('/lib/manager/bundler/locked-version', () => {
+describe('manager/bundler/locked-version', () => {
   test('Parse Rails Gem Lock File', () => {
     const parsedLockEntries = extractLockFileEntries(railsGemfileLock);
     expect(parsedLockEntries.size).toEqual(185);
diff --git a/lib/manager/bundler/range.spec.ts b/lib/manager/bundler/range.spec.ts
index 01f2f41ded..7591971aa8 100644
--- a/lib/manager/bundler/range.spec.ts
+++ b/lib/manager/bundler/range.spec.ts
@@ -1,8 +1,7 @@
-import { getName } from '../../../test/util';
 import type { RangeConfig } from '../types';
 import { getRangeStrategy } from '.';
 
-describe(getName(), () => {
+describe('manager/bundler/range', () => {
   describe('getRangeStrategy()', () => {
     it('returns replace when rangeStrategy is auto', () => {
       const config: RangeConfig = { rangeStrategy: 'auto' };
diff --git a/lib/manager/cake/index.spec.ts b/lib/manager/cake/index.spec.ts
index 059e98cc5b..7ae0efa03e 100644
--- a/lib/manager/cake/index.spec.ts
+++ b/lib/manager/cake/index.spec.ts
@@ -1,9 +1,9 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from '.';
 
 const content = loadFixture('build.cake');
 
-describe(getName(), () => {
+describe('manager/cake/index', () => {
   it('extracts', () => {
     expect(extractPackageFile(content)).toMatchSnapshot({
       deps: [
diff --git a/lib/manager/cargo/__snapshots__/artifacts.spec.ts.snap b/lib/manager/cargo/__snapshots__/artifacts.spec.ts.snap
index c4379f2854..babdcd777c 100644
--- a/lib/manager/cargo/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/cargo/__snapshots__/artifacts.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`.updateArtifacts() returns null if unchanged 1`] = `
+exports[`manager/cargo/artifacts returns null if unchanged 1`] = `
 Array [
   Object {
     "cmd": "cargo update --manifest-path Cargo.toml --package dep1",
@@ -23,7 +23,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated Cargo.lock 1`] = `
+exports[`manager/cargo/artifacts returns updated Cargo.lock 1`] = `
 Array [
   Object {
     "cmd": "cargo update --manifest-path Cargo.toml --package dep1",
@@ -46,7 +46,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated Cargo.lock for lockfile maintenance 1`] = `
+exports[`manager/cargo/artifacts returns updated Cargo.lock for lockfile maintenance 1`] = `
 Array [
   Object {
     "cmd": "cargo update --manifest-path Cargo.toml",
@@ -69,7 +69,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated Cargo.lock with docker 1`] = `
+exports[`manager/cargo/artifacts returns updated Cargo.lock with docker 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/rust",
@@ -104,7 +104,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated workspace Cargo.lock 1`] = `
+exports[`manager/cargo/artifacts returns updated workspace Cargo.lock 1`] = `
 Array [
   Object {
     "cmd": "cargo update --manifest-path crates/one/Cargo.toml --package dep1",
@@ -127,7 +127,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() updates Cargo.lock based on the lookupName, when given 1`] = `
+exports[`manager/cargo/artifacts updates Cargo.lock based on the lookupName, when given 1`] = `
 Array [
   Object {
     "cmd": "cargo update --manifest-path Cargo.toml --package dep1",
diff --git a/lib/manager/cargo/artifacts.spec.ts b/lib/manager/cargo/artifacts.spec.ts
index 69add232ba..b3ee807645 100644
--- a/lib/manager/cargo/artifacts.spec.ts
+++ b/lib/manager/cargo/artifacts.spec.ts
@@ -27,7 +27,7 @@ const adminConfig: RepoGlobalConfig = {
   localDir: join('/tmp/github/some/repo'),
 };
 
-describe('.updateArtifacts()', () => {
+describe('manager/cargo/artifacts', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     jest.resetModules();
diff --git a/lib/manager/cargo/extract.spec.ts b/lib/manager/cargo/extract.spec.ts
index c70875406b..e733510baa 100644
--- a/lib/manager/cargo/extract.spec.ts
+++ b/lib/manager/cargo/extract.spec.ts
@@ -1,6 +1,6 @@
 import { dir } from 'tmp-promise';
 import { join } from 'upath';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import { writeLocalFile } from '../../util/fs';
@@ -15,7 +15,7 @@ const cargo5toml = loadFixture('Cargo.5.toml');
 const cargo6configtoml = loadFixture('cargo.6.config.toml');
 const cargo6toml = loadFixture('Cargo.6.toml');
 
-describe(getName(), () => {
+describe('manager/cargo/extract', () => {
   describe('extractPackageFile()', () => {
     let config: ExtractConfig;
     let adminConfig: RepoGlobalConfig;
diff --git a/lib/manager/cdnurl/extract.spec.ts b/lib/manager/cdnurl/extract.spec.ts
index d6006986e2..6fb3e7d82c 100644
--- a/lib/manager/cdnurl/extract.spec.ts
+++ b/lib/manager/cdnurl/extract.spec.ts
@@ -1,9 +1,9 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from '.';
 
 const input = loadFixture(`sample.txt`);
 
-describe(getName(), () => {
+describe('manager/cdnurl/extract', () => {
   it('extractPackageFile', () => {
     expect(extractPackageFile(input)).toMatchSnapshot({
       deps: [
diff --git a/lib/manager/circleci/extract.spec.ts b/lib/manager/circleci/extract.spec.ts
index a165c43ab7..c4a10688fc 100644
--- a/lib/manager/circleci/extract.spec.ts
+++ b/lib/manager/circleci/extract.spec.ts
@@ -1,11 +1,11 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const file1 = loadFixture('config.yml');
 const file2 = loadFixture('config2.yml');
 const file3 = loadFixture('config3.yml');
 
-describe(getName(), () => {
+describe('manager/circleci/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('nothing here')).toBeNull();
diff --git a/lib/manager/cloudbuild/extract.spec.ts b/lib/manager/cloudbuild/extract.spec.ts
index 1724d763af..9b604be842 100644
--- a/lib/manager/cloudbuild/extract.spec.ts
+++ b/lib/manager/cloudbuild/extract.spec.ts
@@ -1,9 +1,9 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const file1 = loadFixture('cloudbuild.yml');
 
-describe(getName(), () => {
+describe('manager/cloudbuild/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('nothing here')).toBeNull();
diff --git a/lib/manager/cocoapods/__snapshots__/artifacts.spec.ts.snap b/lib/manager/cocoapods/__snapshots__/artifacts.spec.ts.snap
index ef0777414e..8893a1aae3 100644
--- a/lib/manager/cocoapods/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/cocoapods/__snapshots__/artifacts.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`.updateArtifacts() dynamically selects Docker image tag 1`] = `
+exports[`manager/cocoapods/artifacts dynamically selects Docker image tag 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/cocoapods:1.2.4",
@@ -36,7 +36,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() falls back to the \`latest\` Docker image tag 1`] = `
+exports[`manager/cocoapods/artifacts falls back to the \`latest\` Docker image tag 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/cocoapods:latest",
@@ -72,13 +72,13 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns null for invalid local directory 1`] = `Array []`;
+exports[`manager/cocoapods/artifacts returns null for invalid local directory 1`] = `Array []`;
 
-exports[`.updateArtifacts() returns null if no Podfile.lock found 1`] = `Array []`;
+exports[`manager/cocoapods/artifacts returns null if no Podfile.lock found 1`] = `Array []`;
 
-exports[`.updateArtifacts() returns null if no updatedDeps were provided 1`] = `Array []`;
+exports[`manager/cocoapods/artifacts returns null if no updatedDeps were provided 1`] = `Array []`;
 
-exports[`.updateArtifacts() returns null if unchanged 1`] = `
+exports[`manager/cocoapods/artifacts returns null if unchanged 1`] = `
 Array [
   Object {
     "cmd": "pod install",
@@ -102,9 +102,9 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns null if updatedDeps is empty 1`] = `Array []`;
+exports[`manager/cocoapods/artifacts returns null if updatedDeps is empty 1`] = `Array []`;
 
-exports[`.updateArtifacts() returns pod exec error 1`] = `
+exports[`manager/cocoapods/artifacts returns pod exec error 1`] = `
 Array [
   Object {
     "cmd": "pod install",
@@ -128,7 +128,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated Podfile 1`] = `
+exports[`manager/cocoapods/artifacts returns updated Podfile 1`] = `
 Array [
   Object {
     "file": Object {
@@ -139,7 +139,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated Podfile 2`] = `
+exports[`manager/cocoapods/artifacts returns updated Podfile 2`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/cocoapods",
@@ -175,7 +175,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated Podfile and Pods files 1`] = `
+exports[`manager/cocoapods/artifacts returns updated Podfile and Pods files 1`] = `
 Array [
   Object {
     "file": Object {
@@ -204,7 +204,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated Podfile and Pods files 2`] = `
+exports[`manager/cocoapods/artifacts returns updated Podfile and Pods files 2`] = `
 Array [
   Object {
     "cmd": "docker ps --filter name=renovate_cocoapods -aq",
diff --git a/lib/manager/cocoapods/artifacts.spec.ts b/lib/manager/cocoapods/artifacts.spec.ts
index 91f429b107..06bd91f6af 100644
--- a/lib/manager/cocoapods/artifacts.spec.ts
+++ b/lib/manager/cocoapods/artifacts.spec.ts
@@ -32,7 +32,7 @@ const adminConfig: RepoGlobalConfig = {
   cacheDir: join('/tmp/cache'),
 };
 
-describe('.updateArtifacts()', () => {
+describe('manager/cocoapods/artifacts', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     env.getChildProcessEnv.mockReturnValue(envMock.basic);
diff --git a/lib/manager/cocoapods/extract.spec.ts b/lib/manager/cocoapods/extract.spec.ts
index ec1ce46618..3ff03c6367 100644
--- a/lib/manager/cocoapods/extract.spec.ts
+++ b/lib/manager/cocoapods/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import { extractPackageFile } from '.';
@@ -8,7 +8,7 @@ const complexPodfile = loadFixture('Podfile.complex');
 
 const adminConfig: RepoGlobalConfig = { localDir: '' };
 
-describe(getName(), () => {
+describe('manager/cocoapods/extract', () => {
   describe('extractPackageFile()', () => {
     it('extracts from simple file', async () => {
       setGlobalConfig(adminConfig);
diff --git a/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap b/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap
index 7257baf1a9..f814fe495b 100644
--- a/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`.updateArtifacts() catches errors 1`] = `
+exports[`manager/composer/artifacts catches errors 1`] = `
 Array [
   Object {
     "artifactError": Object {
@@ -11,7 +11,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() catches unmet requirements errors 1`] = `
+exports[`manager/composer/artifacts catches unmet requirements errors 1`] = `
 Array [
   Object {
     "artifactError": Object {
@@ -22,7 +22,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() disables ignorePlatformReqs 1`] = `
+exports[`manager/composer/artifacts disables ignorePlatformReqs 1`] = `
 Array [
   Object {
     "cmd": "composer update --with-dependencies --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins",
@@ -46,7 +46,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() performs lockFileMaintenance 1`] = `
+exports[`manager/composer/artifacts performs lockFileMaintenance 1`] = `
 Array [
   Object {
     "cmd": "composer install --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins",
@@ -70,7 +70,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns null if unchanged 1`] = `
+exports[`manager/composer/artifacts returns null if unchanged 1`] = `
 Array [
   Object {
     "cmd": "composer update foo bar --with-dependencies --ignore-platform-reqs --no-ansi --no-interaction",
@@ -94,7 +94,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated composer.lock 1`] = `
+exports[`manager/composer/artifacts returns updated composer.lock 1`] = `
 Array [
   Object {
     "cmd": "composer update --with-dependencies --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins",
@@ -118,7 +118,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() supports docker mode 1`] = `
+exports[`manager/composer/artifacts supports docker mode 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/php:7.3",
@@ -154,7 +154,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() supports global mode 1`] = `
+exports[`manager/composer/artifacts supports global mode 1`] = `
 Array [
   Object {
     "cmd": "composer update --with-dependencies --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins",
@@ -178,7 +178,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() supports vendor directory update 1`] = `
+exports[`manager/composer/artifacts supports vendor directory update 1`] = `
 Array [
   Object {
     "cmd": "composer update --with-dependencies --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins",
@@ -202,7 +202,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() uses hostRules to set COMPOSER_AUTH 1`] = `
+exports[`manager/composer/artifacts uses hostRules to set COMPOSER_AUTH 1`] = `
 Array [
   Object {
     "cmd": "composer update --with-dependencies --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins",
diff --git a/lib/manager/composer/artifacts.spec.ts b/lib/manager/composer/artifacts.spec.ts
index 5028ff78b6..5f40df722f 100644
--- a/lib/manager/composer/artifacts.spec.ts
+++ b/lib/manager/composer/artifacts.spec.ts
@@ -41,7 +41,7 @@ const repoStatus = partial<StatusResult>({
   deleted: [],
 });
 
-describe('.updateArtifacts()', () => {
+describe('manager/composer/artifacts', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     jest.resetModules();
diff --git a/lib/manager/composer/extract.spec.ts b/lib/manager/composer/extract.spec.ts
index 0aff3224f9..bd28970235 100644
--- a/lib/manager/composer/extract.spec.ts
+++ b/lib/manager/composer/extract.spec.ts
@@ -1,4 +1,4 @@
-import { fs, getName, loadFixture } from '../../../test/util';
+import { fs, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 jest.mock('../../util/fs');
@@ -10,7 +10,7 @@ const requirements4 = loadFixture('composer4.json');
 const requirements5 = loadFixture('composer5.json');
 const requirements5Lock = loadFixture('composer5.lock');
 
-describe(getName(), () => {
+describe('manager/composer/extract', () => {
   describe('extractPackageFile()', () => {
     let packageFile;
     beforeEach(() => {
diff --git a/lib/manager/composer/range.spec.ts b/lib/manager/composer/range.spec.ts
index 90b2c2f8ff..91e53b0017 100644
--- a/lib/manager/composer/range.spec.ts
+++ b/lib/manager/composer/range.spec.ts
@@ -1,7 +1,7 @@
 import type { RangeConfig } from '../types';
 import { getRangeStrategy } from '.';
 
-describe('getRangeStrategy', () => {
+describe('manager/composer/range', () => {
   it('returns same if not auto', () => {
     const config: RangeConfig = { rangeStrategy: 'widen' };
     expect(getRangeStrategy(config)).toEqual('widen');
diff --git a/lib/manager/composer/utils.spec.ts b/lib/manager/composer/utils.spec.ts
index 8102e71fe8..de07a966cd 100644
--- a/lib/manager/composer/utils.spec.ts
+++ b/lib/manager/composer/utils.spec.ts
@@ -1,4 +1,4 @@
-import { getName, mocked } from '../../../test/util';
+import { mocked } from '../../../test/util';
 import * as _datasource from '../../datasource';
 import { extractContraints, getComposerConstraint } from './utils';
 
@@ -6,7 +6,7 @@ jest.mock('../../../lib/datasource');
 
 const datasource = mocked(_datasource);
 
-describe(getName(), () => {
+describe('manager/composer/utils', () => {
   describe('getComposerConstraint', () => {
     beforeEach(() => {
       datasource.getPkgReleases.mockResolvedValueOnce({
diff --git a/lib/manager/deps-edn/extract.spec.ts b/lib/manager/deps-edn/extract.spec.ts
index c91b094f4b..286a710590 100644
--- a/lib/manager/deps-edn/extract.spec.ts
+++ b/lib/manager/deps-edn/extract.spec.ts
@@ -1,9 +1,9 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const depsEdn = loadFixture('deps.edn');
 
-describe(getName(), () => {
+describe('manager/deps-edn/extract', () => {
   it('extractPackageFile', () => {
     // FIXME: explicit assert condition
     expect(extractPackageFile(depsEdn)).toMatchSnapshot();
diff --git a/lib/manager/docker-compose/extract.spec.ts b/lib/manager/docker-compose/extract.spec.ts
index c1bbd0acfc..e0b09bddf8 100644
--- a/lib/manager/docker-compose/extract.spec.ts
+++ b/lib/manager/docker-compose/extract.spec.ts
@@ -1,11 +1,11 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const yamlFile1 = loadFixture('docker-compose.1.yml');
 const yamlFile3 = loadFixture('docker-compose.3.yml');
 const yamlFile3NoVersion = loadFixture('docker-compose.3-no-version.yml');
 
-describe(getName(), () => {
+describe('manager/docker-compose/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('')).toBeNull();
diff --git a/lib/manager/dockerfile/extract.spec.ts b/lib/manager/dockerfile/extract.spec.ts
index 96ebdcd718..2270aae669 100644
--- a/lib/manager/dockerfile/extract.spec.ts
+++ b/lib/manager/dockerfile/extract.spec.ts
@@ -1,10 +1,10 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile, getDep } from './extract';
 
 const d1 = loadFixture('1.Dockerfile');
 const d2 = loadFixture('2.Dockerfile');
 
-describe(getName(), () => {
+describe('manager/dockerfile/extract', () => {
   describe('extractPackageFile()', () => {
     it('handles no FROM', () => {
       const res = extractPackageFile('no from!');
diff --git a/lib/manager/droneci/extract.spec.ts b/lib/manager/droneci/extract.spec.ts
index db090b4903..b53439d9cd 100644
--- a/lib/manager/droneci/extract.spec.ts
+++ b/lib/manager/droneci/extract.spec.ts
@@ -1,10 +1,10 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 
 import { extractPackageFile } from './extract';
 
 const droneYAML = loadFixture('.drone.yml');
 
-describe(getName(), () => {
+describe('manager/droneci/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('nothing here')).toBeNull();
diff --git a/lib/manager/git-submodules/artifact.spec.ts b/lib/manager/git-submodules/artifact.spec.ts
index e62be64b41..e2c80005c7 100644
--- a/lib/manager/git-submodules/artifact.spec.ts
+++ b/lib/manager/git-submodules/artifact.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import updateArtifacts from './artifacts';
 
-describe(getName(), () => {
+describe('manager/git-submodules/artifact', () => {
   describe('updateArtifacts()', () => {
     it('returns empty content', () => {
       // FIXME: explicit assert condition
diff --git a/lib/manager/git-submodules/extract.spec.ts b/lib/manager/git-submodules/extract.spec.ts
index a976e64d3c..e73c169306 100644
--- a/lib/manager/git-submodules/extract.spec.ts
+++ b/lib/manager/git-submodules/extract.spec.ts
@@ -1,6 +1,6 @@
 import { mock } from 'jest-mock-extended';
 import _simpleGit, { Response, SimpleGit } from 'simple-git';
-import { getName, partial } from '../../../test/util';
+import { partial } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import * as hostRules from '../../util/host-rules';
 import type { PackageFile } from '../types';
@@ -10,7 +10,7 @@ jest.mock('simple-git');
 const simpleGit: jest.Mock<Partial<SimpleGit>> = _simpleGit as never;
 const Git: typeof _simpleGit = jest.requireActual('simple-git');
 
-describe(getName(), () => {
+describe('manager/git-submodules/extract', () => {
   // flaky ci tests
   jest.setTimeout(10 * 1000);
 
diff --git a/lib/manager/git-submodules/update.spec.ts b/lib/manager/git-submodules/update.spec.ts
index 9e6a11c9e4..ef7e07bdaf 100644
--- a/lib/manager/git-submodules/update.spec.ts
+++ b/lib/manager/git-submodules/update.spec.ts
@@ -1,7 +1,6 @@
 import _simpleGit from 'simple-git';
 import { dir } from 'tmp-promise';
 import { join } from 'upath';
-import { getName } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import type { Upgrade } from '../types';
@@ -10,7 +9,7 @@ import updateDependency from './update';
 jest.mock('simple-git');
 const simpleGit: any = _simpleGit;
 
-describe(getName(), () => {
+describe('manager/git-submodules/update', () => {
   describe('updateDependency', () => {
     let upgrade: Upgrade;
     let adminConfig: RepoGlobalConfig;
diff --git a/lib/manager/github-actions/extract.spec.ts b/lib/manager/github-actions/extract.spec.ts
index a26dba4853..94926c9535 100644
--- a/lib/manager/github-actions/extract.spec.ts
+++ b/lib/manager/github-actions/extract.spec.ts
@@ -1,10 +1,10 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const workflow1 = loadFixture('workflow_1.yml');
 const workflow2 = loadFixture('workflow_2.yml');
 
-describe(getName(), () => {
+describe('manager/github-actions/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('nothing here')).toBeNull();
diff --git a/lib/manager/gitlabci-include/extract.spec.ts b/lib/manager/gitlabci-include/extract.spec.ts
index d4cb6fb9ec..e57a302d12 100644
--- a/lib/manager/gitlabci-include/extract.spec.ts
+++ b/lib/manager/gitlabci-include/extract.spec.ts
@@ -1,9 +1,9 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const yamlFile = loadFixture('gitlab-ci.1.yaml');
 
-describe(getName(), () => {
+describe('manager/gitlabci-include/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(
diff --git a/lib/manager/gitlabci/extract.spec.ts b/lib/manager/gitlabci/extract.spec.ts
index 1f48752ced..ed316fab86 100644
--- a/lib/manager/gitlabci/extract.spec.ts
+++ b/lib/manager/gitlabci/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, logger } from '../../../test/util';
+import { logger } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import type { ExtractConfig, PackageDependency } from '../types';
@@ -8,7 +8,7 @@ const config: ExtractConfig = {};
 
 const adminConfig: RepoGlobalConfig = { localDir: '' };
 
-describe(getName(), () => {
+describe('manager/gitlabci/extract', () => {
   beforeEach(() => {
     setGlobalConfig(adminConfig);
   });
diff --git a/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap b/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap
index d3178a961b..966b7dd6c0 100644
--- a/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/gomod/__snapshots__/artifacts.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`.updateArtifacts() catches errors 1`] = `
+exports[`manager/gomod/artifacts catches errors 1`] = `
 Array [
   Object {
     "artifactError": Object {
@@ -11,11 +11,11 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() catches errors 2`] = `Array []`;
+exports[`manager/gomod/artifacts catches errors 2`] = `Array []`;
 
-exports[`.updateArtifacts() returns if no go.sum found 1`] = `Array []`;
+exports[`manager/gomod/artifacts returns if no go.sum found 1`] = `Array []`;
 
-exports[`.updateArtifacts() returns null if unchanged 1`] = `
+exports[`manager/gomod/artifacts returns null if unchanged 1`] = `
 Array [
   Object {
     "cmd": "go get -d ./...",
@@ -45,7 +45,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated go.sum 1`] = `
+exports[`manager/gomod/artifacts returns updated go.sum 1`] = `
 Array [
   Object {
     "cmd": "go get -d ./...",
@@ -75,7 +75,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() skips updating import paths for gopkg.in dependencies 1`] = `
+exports[`manager/gomod/artifacts skips updating import paths for gopkg.in dependencies 1`] = `
 Array [
   Object {
     "file": Object {
@@ -92,7 +92,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() skips updating import paths for gopkg.in dependencies 2`] = `
+exports[`manager/gomod/artifacts skips updating import paths for gopkg.in dependencies 2`] = `
 Array [
   Object {
     "cmd": "go get -d ./...",
@@ -172,7 +172,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() skips updating import paths with gomodUpdateImportPaths on v0 to v1 1`] = `
+exports[`manager/gomod/artifacts skips updating import paths with gomodUpdateImportPaths on v0 to v1 1`] = `
 Array [
   Object {
     "file": Object {
@@ -189,7 +189,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() skips updating import paths with gomodUpdateImportPaths on v0 to v1 2`] = `
+exports[`manager/gomod/artifacts skips updating import paths with gomodUpdateImportPaths on v0 to v1 2`] = `
 Array [
   Object {
     "cmd": "go get -d ./...",
@@ -269,7 +269,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() supports docker mode with credentials 1`] = `
+exports[`manager/gomod/artifacts supports docker mode with credentials 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/go:latest",
@@ -311,7 +311,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() supports docker mode with goModTidy 1`] = `
+exports[`manager/gomod/artifacts supports docker mode with goModTidy 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/go:latest",
@@ -353,7 +353,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() supports docker mode without credentials 1`] = `
+exports[`manager/gomod/artifacts supports docker mode without credentials 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/go:latest",
@@ -395,7 +395,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() supports global mode 1`] = `
+exports[`manager/gomod/artifacts supports global mode 1`] = `
 Array [
   Object {
     "cmd": "go get -d ./...",
@@ -425,7 +425,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() supports vendor directory update 1`] = `
+exports[`manager/gomod/artifacts supports vendor directory update 1`] = `
 Array [
   Object {
     "cmd": "go get -d ./...",
@@ -555,7 +555,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() updates import paths with gomodUpdateImportPaths 1`] = `
+exports[`manager/gomod/artifacts updates import paths with gomodUpdateImportPaths 1`] = `
 Array [
   Object {
     "file": Object {
@@ -578,7 +578,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() updates import paths with gomodUpdateImportPaths 2`] = `
+exports[`manager/gomod/artifacts updates import paths with gomodUpdateImportPaths 2`] = `
 Array [
   Object {
     "cmd": "go get -d ./...",
@@ -708,7 +708,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() updates import paths with latest tool version on invalid version constraint 1`] = `
+exports[`manager/gomod/artifacts updates import paths with latest tool version on invalid version constraint 1`] = `
 Array [
   Object {
     "file": Object {
@@ -731,7 +731,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() updates import paths with latest tool version on invalid version constraint 2`] = `
+exports[`manager/gomod/artifacts updates import paths with latest tool version on invalid version constraint 2`] = `
 Array [
   Object {
     "cmd": "go get -d ./...",
@@ -861,7 +861,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() updates import paths with specific tool version from constraint 1`] = `
+exports[`manager/gomod/artifacts updates import paths with specific tool version from constraint 1`] = `
 Array [
   Object {
     "file": Object {
@@ -884,7 +884,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() updates import paths with specific tool version from constraint 2`] = `
+exports[`manager/gomod/artifacts updates import paths with specific tool version from constraint 2`] = `
 Array [
   Object {
     "cmd": "go get -d ./...",
diff --git a/lib/manager/gomod/artifacts.spec.ts b/lib/manager/gomod/artifacts.spec.ts
index 5f73da355b..4e56f41179 100644
--- a/lib/manager/gomod/artifacts.spec.ts
+++ b/lib/manager/gomod/artifacts.spec.ts
@@ -54,7 +54,7 @@ const goEnv = {
   CGO_ENABLED: '1',
 };
 
-describe('.updateArtifacts()', () => {
+describe('manager/gomod/artifacts', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     jest.resetModules();
diff --git a/lib/manager/gomod/extract.spec.ts b/lib/manager/gomod/extract.spec.ts
index 1de4a0479a..45889a2c51 100644
--- a/lib/manager/gomod/extract.spec.ts
+++ b/lib/manager/gomod/extract.spec.ts
@@ -1,11 +1,11 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const gomod1 = loadFixture('1/go.mod');
 const gomod2 = loadFixture('2/go.mod');
 const gomod3 = loadFixture('3/go.mod');
 
-describe(getName(), () => {
+describe('manager/gomod/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('nothing here')).toBeNull();
diff --git a/lib/manager/gomod/update.spec.ts b/lib/manager/gomod/update.spec.ts
index 7104f9c388..271ebfdd6a 100644
--- a/lib/manager/gomod/update.spec.ts
+++ b/lib/manager/gomod/update.spec.ts
@@ -1,11 +1,11 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import type { UpdateType } from '../../config/types';
 import { updateDependency } from './update';
 
 const gomod1 = loadFixture('1/go.mod');
 const gomod2 = loadFixture('2/go.mod');
 
-describe(getName(), () => {
+describe('manager/gomod/update', () => {
   describe('updateDependency', () => {
     it('replaces existing value', () => {
       const upgrade = {
diff --git a/lib/manager/gradle-wrapper/artifacts-real.spec.ts b/lib/manager/gradle-wrapper/artifacts-real.spec.ts
index a464906c71..fa522df650 100644
--- a/lib/manager/gradle-wrapper/artifacts-real.spec.ts
+++ b/lib/manager/gradle-wrapper/artifacts-real.spec.ts
@@ -2,7 +2,7 @@ import { readFile, readFileSync } from 'fs-extra';
 import Git from 'simple-git';
 import { resolve } from 'upath';
 import * as httpMock from '../../../test/http-mock';
-import { getName, git, partial } from '../../../test/util';
+import { git, partial } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import type { StatusResult } from '../../util/git';
@@ -36,7 +36,7 @@ function compareFile(file: string, path: string) {
   );
 }
 
-describe(getName(), () => {
+describe('manager/gradle-wrapper/artifacts-real', () => {
   ifSystemSupportsGradle(6).describe('real tests', () => {
     jest.setTimeout(60 * 1000);
 
diff --git a/lib/manager/gradle-wrapper/artifacts.spec.ts b/lib/manager/gradle-wrapper/artifacts.spec.ts
index 7e7c5ef2c5..5ce870f9dc 100644
--- a/lib/manager/gradle-wrapper/artifacts.spec.ts
+++ b/lib/manager/gradle-wrapper/artifacts.spec.ts
@@ -8,7 +8,6 @@ import {
   addReplacingSerializer,
   env,
   fs,
-  getName,
   git,
   partial,
 } from '../../../test/util';
@@ -44,7 +43,7 @@ function readString(...paths: string[]): Promise<string> {
   return readFile(resolve(fixtures, ...paths), 'utf8');
 }
 
-describe(getName(), () => {
+describe('manager/gradle-wrapper/artifacts', () => {
   beforeEach(() => {
     jest.resetAllMocks();
 
diff --git a/lib/manager/gradle-wrapper/extract.spec.ts b/lib/manager/gradle-wrapper/extract.spec.ts
index 36c67eef1f..88fcc584a7 100644
--- a/lib/manager/gradle-wrapper/extract.spec.ts
+++ b/lib/manager/gradle-wrapper/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const propertiesFile1 = loadFixture('gradle-wrapper-1.properties');
@@ -9,7 +9,7 @@ const whitespacePropertiesFile = loadFixture(
   'gradle-wrapper-whitespace.properties'
 );
 
-describe(getName(), () => {
+describe('manager/gradle-wrapper/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('nothing here')).toBeNull();
diff --git a/lib/manager/gradle/deep/build-gradle.spec.ts b/lib/manager/gradle/deep/build-gradle.spec.ts
index acb5669319..f12807a96f 100644
--- a/lib/manager/gradle/deep/build-gradle.spec.ts
+++ b/lib/manager/gradle/deep/build-gradle.spec.ts
@@ -1,11 +1,10 @@
-import { getName } from '../../../../test/util';
 import {
   collectVersionVariables,
   init,
   updateGradleVersion,
 } from './build-gradle';
 
-describe(getName(), () => {
+describe('manager/gradle/deep/build-gradle', () => {
   beforeEach(() => {
     init();
   });
diff --git a/lib/manager/gradle/deep/gradle-updates-report.spec.ts b/lib/manager/gradle/deep/gradle-updates-report.spec.ts
index 6da98f8651..45a58fd4f7 100644
--- a/lib/manager/gradle/deep/gradle-updates-report.spec.ts
+++ b/lib/manager/gradle/deep/gradle-updates-report.spec.ts
@@ -1,7 +1,6 @@
 import * as fs from 'fs-extra';
 import tmp, { DirectoryResult } from 'tmp-promise';
 import * as upath from 'upath';
-import { getName } from '../../../../test/util';
 import { exec } from '../../../util/exec';
 import { ifSystemSupportsGradle } from './__testutil__/gradle';
 import {
@@ -13,7 +12,7 @@ import { GRADLE_DEPENDENCY_REPORT_OPTIONS } from '.';
 
 const fixtures = 'lib/manager/gradle/deep/__fixtures__';
 
-describe(getName(), () => {
+describe('manager/gradle/deep/gradle-updates-report', () => {
   for (const gradleVersion of [5, 6]) {
     ifSystemSupportsGradle(gradleVersion).describe(
       'createRenovateGradlePlugin',
diff --git a/lib/manager/gradle/deep/index-real.spec.ts b/lib/manager/gradle/deep/index-real.spec.ts
index 2b7ac2961e..7903247d3d 100644
--- a/lib/manager/gradle/deep/index-real.spec.ts
+++ b/lib/manager/gradle/deep/index-real.spec.ts
@@ -1,6 +1,5 @@
 import fsExtra from 'fs-extra';
 import tmp, { DirectoryResult } from 'tmp-promise';
-import { getName } from '../../../../test/util';
 import { setGlobalConfig } from '../../../config/global';
 import type { RepoGlobalConfig } from '../../../config/types';
 import type { ExtractConfig } from '../../types';
@@ -15,7 +14,7 @@ const baseConfig = {
   },
 };
 
-describe(getName(), () => {
+describe('manager/gradle/deep/index-real', () => {
   ifSystemSupportsGradle(6).describe('executeGradle integration', () => {
     const SUCCESS_FILE_NAME = 'success.indicator';
     let workingDir: DirectoryResult;
diff --git a/lib/manager/gradle/deep/index.spec.ts b/lib/manager/gradle/deep/index.spec.ts
index 3a7e22b4cf..14d6defd9b 100644
--- a/lib/manager/gradle/deep/index.spec.ts
+++ b/lib/manager/gradle/deep/index.spec.ts
@@ -7,7 +7,6 @@ import { extractAllPackageFiles, updateDependency } from '..';
 import { envMock, mockExecAll } from '../../../../test/exec-util';
 import {
   addReplacingSerializer,
-  getName,
   loadFixture,
   mocked,
 } from '../../../../test/util';
@@ -56,7 +55,7 @@ dependency "baz:baz:\${bazVersion}"
 addReplacingSerializer('gradlew.bat', '<gradlew>');
 addReplacingSerializer('./gradlew', '<gradlew>');
 
-describe(getName(), () => {
+describe('manager/gradle/deep/index', () => {
   const updatesReport = loadFixture('updatesReport.json');
 
   function setupMocks({
diff --git a/lib/manager/gradle/shallow/extract.spec.ts b/lib/manager/gradle/shallow/extract.spec.ts
index 20299d6cef..1456652cd4 100644
--- a/lib/manager/gradle/shallow/extract.spec.ts
+++ b/lib/manager/gradle/shallow/extract.spec.ts
@@ -1,5 +1,5 @@
 import { extractAllPackageFiles } from '..';
-import { fs, getName } from '../../../../test/util';
+import { fs } from '../../../../test/util';
 
 jest.mock('../../../util/fs');
 
@@ -12,7 +12,7 @@ function mockFs(files: Record<string, string>): void {
   });
 }
 
-describe(getName(), () => {
+describe('manager/gradle/shallow/extract', () => {
   beforeAll(() => {});
   afterAll(() => {
     jest.resetAllMocks();
diff --git a/lib/manager/gradle/shallow/parser.spec.ts b/lib/manager/gradle/shallow/parser.spec.ts
index 169d058651..869c092aae 100644
--- a/lib/manager/gradle/shallow/parser.spec.ts
+++ b/lib/manager/gradle/shallow/parser.spec.ts
@@ -1,8 +1,8 @@
-import { getName, loadFixture } from '../../../../test/util';
+import { loadFixture } from '../../../../test/util';
 import { GOOGLE_REPO, JCENTER_REPO, MAVEN_REPO } from './common';
 import { parseGradle, parseProps } from './parser';
 
-describe(getName(), () => {
+describe('manager/gradle/shallow/parser', () => {
   it('handles end of input', () => {
     expect(parseGradle('version = ').deps).toBeEmpty();
     expect(parseGradle('id "foo.bar" version').deps).toBeEmpty();
diff --git a/lib/manager/gradle/shallow/tokenizer.spec.ts b/lib/manager/gradle/shallow/tokenizer.spec.ts
index d634cd20c3..98af7fcb29 100644
--- a/lib/manager/gradle/shallow/tokenizer.spec.ts
+++ b/lib/manager/gradle/shallow/tokenizer.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../../../test/util';
 import { TokenType } from './common';
 import { extractRawTokens, tokenize } from './tokenizer';
 
@@ -6,7 +5,7 @@ function tokenTypes(input): string[] {
   return extractRawTokens(input).map((token) => token.type);
 }
 
-describe(getName(), () => {
+describe('manager/gradle/shallow/tokenizer', () => {
   it('extractTokens', () => {
     const samples = {
       ' ': [TokenType.Space],
diff --git a/lib/manager/gradle/shallow/update.spec.ts b/lib/manager/gradle/shallow/update.spec.ts
index 73e33334ef..73033ef1c1 100644
--- a/lib/manager/gradle/shallow/update.spec.ts
+++ b/lib/manager/gradle/shallow/update.spec.ts
@@ -1,7 +1,6 @@
 import { updateDependency } from '..';
-import { getName } from '../../../../test/util';
 
-describe(getName(), () => {
+describe('manager/gradle/shallow/update', () => {
   it('replaces', () => {
     expect(
       updateDependency({
diff --git a/lib/manager/gradle/shallow/utils.spec.ts b/lib/manager/gradle/shallow/utils.spec.ts
index f0eb232c4c..eb37b9132c 100644
--- a/lib/manager/gradle/shallow/utils.spec.ts
+++ b/lib/manager/gradle/shallow/utils.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../../../test/util';
 import { TokenType } from './common';
 import {
   getVars,
@@ -10,7 +9,7 @@ import {
   versionLikeSubstring,
 } from './utils';
 
-describe(getName(), () => {
+describe('manager/gradle/shallow/utils', () => {
   it('versionLikeSubstring', () => {
     [
       '1.2.3',
diff --git a/lib/manager/helm-requirements/extract.spec.ts b/lib/manager/helm-requirements/extract.spec.ts
index 90b93eecf9..7b26f226a7 100644
--- a/lib/manager/helm-requirements/extract.spec.ts
+++ b/lib/manager/helm-requirements/extract.spec.ts
@@ -1,10 +1,10 @@
-import { fs, getName } from '../../../test/util';
+import { fs } from '../../../test/util';
 import { SkipReason } from '../../types';
 import { extractPackageFile } from './extract';
 
 jest.mock('../../util/fs');
 
-describe(getName(), () => {
+describe('manager/helm-requirements/extract', () => {
   describe('extractPackageFile()', () => {
     beforeEach(() => {
       jest.resetAllMocks();
diff --git a/lib/manager/helm-values/extract.spec.ts b/lib/manager/helm-values/extract.spec.ts
index a2007abbfd..ed7136829a 100644
--- a/lib/manager/helm-values/extract.spec.ts
+++ b/lib/manager/helm-values/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const helmDefaultChartInitValues = loadFixture(
@@ -9,7 +9,7 @@ const helmMultiAndNestedImageValues = loadFixture(
   'multi_and_nested_image_values.yaml'
 );
 
-describe(getName(), () => {
+describe('manager/helm-values/extract', () => {
   describe('extractPackageFile()', () => {
     beforeEach(() => {
       jest.resetAllMocks();
diff --git a/lib/manager/helmfile/extract.spec.ts b/lib/manager/helmfile/extract.spec.ts
index 14f6f6f1b4..8e067c2990 100644
--- a/lib/manager/helmfile/extract.spec.ts
+++ b/lib/manager/helmfile/extract.spec.ts
@@ -1,9 +1,9 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from '.';
 
 const multidocYaml = loadFixture('multidoc.yaml');
 
-describe(getName(), () => {
+describe('manager/helmfile/extract', () => {
   describe('extractPackageFile()', () => {
     beforeEach(() => {
       jest.resetAllMocks();
diff --git a/lib/manager/helmv3/__snapshots__/artifacts.spec.ts.snap b/lib/manager/helmv3/__snapshots__/artifacts.spec.ts.snap
index 0118cbd4b1..fa3a80d86b 100644
--- a/lib/manager/helmv3/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/helmv3/__snapshots__/artifacts.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`.updateArtifacts() catches errors 1`] = `
+exports[`manager/helmv3/artifacts catches errors 1`] = `
 Array [
   Object {
     "artifactError": Object {
@@ -11,7 +11,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns null if unchanged 1`] = `
+exports[`manager/helmv3/artifacts returns null if unchanged 1`] = `
 Array [
   Object {
     "cmd": "helm dependency update ''",
@@ -34,7 +34,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated Chart.lock 1`] = `
+exports[`manager/helmv3/artifacts returns updated Chart.lock 1`] = `
 Array [
   Object {
     "cmd": "helm dependency update ''",
@@ -57,7 +57,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated Chart.lock for lockfile maintenance 1`] = `
+exports[`manager/helmv3/artifacts returns updated Chart.lock for lockfile maintenance 1`] = `
 Array [
   Object {
     "cmd": "helm dependency update ''",
@@ -80,7 +80,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated Chart.lock with docker 1`] = `
+exports[`manager/helmv3/artifacts returns updated Chart.lock with docker 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/helm",
diff --git a/lib/manager/helmv3/artifacts.spec.ts b/lib/manager/helmv3/artifacts.spec.ts
index 3774464b63..152b778cd2 100644
--- a/lib/manager/helmv3/artifacts.spec.ts
+++ b/lib/manager/helmv3/artifacts.spec.ts
@@ -26,7 +26,7 @@ const adminConfig: RepoGlobalConfig = {
 
 const config: UpdateArtifactsConfig = {};
 
-describe('.updateArtifacts()', () => {
+describe('manager/helmv3/artifacts', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     jest.resetModules();
diff --git a/lib/manager/helmv3/extract.spec.ts b/lib/manager/helmv3/extract.spec.ts
index b09eeae237..2967db1578 100644
--- a/lib/manager/helmv3/extract.spec.ts
+++ b/lib/manager/helmv3/extract.spec.ts
@@ -1,9 +1,9 @@
-import { fs, getName } from '../../../test/util';
+import { fs } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 jest.mock('../../util/fs');
 
-describe(getName(), () => {
+describe('manager/helmv3/extract', () => {
   describe('extractPackageFile()', () => {
     beforeEach(() => {
       jest.resetAllMocks();
diff --git a/lib/manager/helmv3/update.spec.ts b/lib/manager/helmv3/update.spec.ts
index c2aaface07..d157aeb208 100644
--- a/lib/manager/helmv3/update.spec.ts
+++ b/lib/manager/helmv3/update.spec.ts
@@ -1,8 +1,7 @@
 import { dump } from 'js-yaml';
-import { getName } from '../../../test/util';
 import * as helmv3Updater from './update';
 
-describe(getName(), () => {
+describe('manager/helmv3/update', () => {
   describe('.bumpPackageVersion()', () => {
     const content = dump({
       apiVersion: 'v2',
diff --git a/lib/manager/homebrew/extract.spec.ts b/lib/manager/homebrew/extract.spec.ts
index 3fa19ad8b3..e6a1be41ae 100644
--- a/lib/manager/homebrew/extract.spec.ts
+++ b/lib/manager/homebrew/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const aalib = loadFixture('aalib.rb');
@@ -7,7 +7,7 @@ const acmetool = loadFixture('acmetool.rb');
 const aide = loadFixture('aide.rb');
 const ibazel = loadFixture('ibazel.rb');
 
-describe(getName(), () => {
+describe('manager/homebrew/extract', () => {
   describe('extractPackageFile()', () => {
     it('skips sourceforge dependency 1', () => {
       const res = extractPackageFile(aalib);
diff --git a/lib/manager/homebrew/update.spec.ts b/lib/manager/homebrew/update.spec.ts
index 44b6618413..d187c40dfc 100644
--- a/lib/manager/homebrew/update.spec.ts
+++ b/lib/manager/homebrew/update.spec.ts
@@ -1,6 +1,6 @@
 import { Readable } from 'stream';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { updateDependency } from './update';
 
 const aide = loadFixture('aide.rb');
@@ -8,7 +8,7 @@ const ibazel = loadFixture('ibazel.rb');
 
 const baseUrl = 'https://github.com';
 
-describe(getName(), () => {
+describe('manager/homebrew/update', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     jest.resetModules();
diff --git a/lib/manager/homebrew/util.spec.ts b/lib/manager/homebrew/util.spec.ts
index c29346a2f0..f602cefe1d 100644
--- a/lib/manager/homebrew/util.spec.ts
+++ b/lib/manager/homebrew/util.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { skip } from './util';
 
-describe(getName(), () => {
+describe('manager/homebrew/util', () => {
   describe('skip()', () => {
     it('handles out of bounds case', () => {
       const content = 'some content';
diff --git a/lib/manager/html/extract.spec.ts b/lib/manager/html/extract.spec.ts
index df81548e67..673ab2caad 100644
--- a/lib/manager/html/extract.spec.ts
+++ b/lib/manager/html/extract.spec.ts
@@ -1,10 +1,10 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from '.';
 
 const sample = loadFixture(`sample.html`);
 const nothing = loadFixture(`nothing.html`);
 
-describe(getName(), () => {
+describe('manager/html/extract', () => {
   it('extractPackageFile', () => {
     // FIXME: explicit assert condition
     expect(extractPackageFile(sample)).toMatchSnapshot();
diff --git a/lib/manager/index.spec.ts b/lib/manager/index.spec.ts
index 3abf45a4eb..36bdc75504 100644
--- a/lib/manager/index.spec.ts
+++ b/lib/manager/index.spec.ts
@@ -1,9 +1,8 @@
-import { getName } from '../../test/util';
 import { loadModules } from '../util/modules';
 import type { ManagerApi } from './types';
 import * as manager from '.';
 
-describe(getName(), () => {
+describe('manager/index', () => {
   describe('get()', () => {
     it('gets something', () => {
       expect(manager.get('dockerfile', 'extractPackageFile')).not.toBeNull();
diff --git a/lib/manager/jenkins/extract.spec.ts b/lib/manager/jenkins/extract.spec.ts
index 8163a93502..7f0e163b8d 100644
--- a/lib/manager/jenkins/extract.spec.ts
+++ b/lib/manager/jenkins/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const invalidYamlFile = loadFixture('invalid.yaml');
@@ -9,7 +9,7 @@ const pluginsYamlFile = loadFixture('plugins.yaml');
 const pluginsEmptyTextFile = loadFixture('empty.txt');
 const pluginsEmptyYamlFile = loadFixture('empty.yaml');
 
-describe(getName(), () => {
+describe('manager/jenkins/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns empty list for an empty text file', () => {
       const res = extractPackageFile(pluginsEmptyTextFile, 'path/file.txt');
diff --git a/lib/manager/kubernetes/extract.spec.ts b/lib/manager/kubernetes/extract.spec.ts
index fa7f3b1f63..69b1296515 100644
--- a/lib/manager/kubernetes/extract.spec.ts
+++ b/lib/manager/kubernetes/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const kubernetesImagesFile = loadFixture('kubernetes.yaml');
@@ -6,7 +6,7 @@ const kubernetesConfigMapFile = loadFixture('configmap.yaml');
 const kubernetesArraySyntaxFile = loadFixture('array-syntax.yaml');
 const otherYamlFile = loadFixture('gitlab-ci.yaml');
 
-describe(getName(), () => {
+describe('manager/kubernetes/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile(kubernetesConfigMapFile)).toBeNull();
diff --git a/lib/manager/kustomize/extract.spec.ts b/lib/manager/kustomize/extract.spec.ts
index 4f2d7a39b5..afc8c93321 100644
--- a/lib/manager/kustomize/extract.spec.ts
+++ b/lib/manager/kustomize/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import * as datasourceDocker from '../../datasource/docker';
 import * as datasourceGitTags from '../../datasource/git-tags';
 import * as datasourceGitHubTags from '../../datasource/github-tags';
@@ -21,7 +21,7 @@ const gitImages = loadFixture('gitImages.yaml');
 const kustomizeDepsInResources = loadFixture('depsInResources.yaml');
 const sha = loadFixture('sha.yaml');
 
-describe(getName(), () => {
+describe('manager/kustomize/extract', () => {
   it('should successfully parse a valid kustomize file', () => {
     const file = parseKustomize(kustomizeGitSSHBase);
     expect(file).not.toBeNull();
diff --git a/lib/manager/leiningen/extract.spec.ts b/lib/manager/leiningen/extract.spec.ts
index 0f823c7b67..d32d9af17b 100644
--- a/lib/manager/leiningen/extract.spec.ts
+++ b/lib/manager/leiningen/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { ClojureDatasource } from '../../datasource/clojure';
 import {
   extractFromVectors,
@@ -9,7 +9,7 @@ import {
 
 const leinProjectClj = loadFixture(`project.clj`);
 
-describe(getName(), () => {
+describe('manager/leiningen/extract', () => {
   it('trimAtKey', () => {
     expect(trimAtKey('foo', 'bar')).toBeNull();
     expect(trimAtKey(':dependencies    ', 'dependencies')).toBeNull();
diff --git a/lib/manager/maven/extract.spec.ts b/lib/manager/maven/extract.spec.ts
index e36edd51d4..13955a2a61 100644
--- a/lib/manager/maven/extract.spec.ts
+++ b/lib/manager/maven/extract.spec.ts
@@ -1,11 +1,11 @@
 /* eslint-disable no-template-curly-in-string */
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackage } from './extract';
 
 const minimumContent = loadFixture(`minimum.pom.xml`);
 const simpleContent = loadFixture(`simple.pom.xml`);
 
-describe(getName(), () => {
+describe('manager/maven/extract', () => {
   describe('extractDependencies', () => {
     it('returns null for invalid XML', () => {
       expect(extractPackage(undefined)).toBeNull();
diff --git a/lib/manager/maven/index.spec.ts b/lib/manager/maven/index.spec.ts
index 8b724113ee..df1ee2d402 100644
--- a/lib/manager/maven/index.spec.ts
+++ b/lib/manager/maven/index.spec.ts
@@ -1,4 +1,4 @@
-import { fs, getName, loadFixture } from '../../../test/util';
+import { fs, loadFixture } from '../../../test/util';
 import type { PackageDependency, PackageFile } from '../types';
 import { extractPackage, resolveParents } from './extract';
 import { extractAllPackageFiles, updateDependency } from '.';
@@ -14,7 +14,7 @@ function selectDep(deps: PackageDependency[], name = 'org.example:quuz') {
   return deps.find((dep) => dep.depName === name);
 }
 
-describe(getName(), () => {
+describe('manager/maven/index', () => {
   describe('extractAllPackageFiles', () => {
     it('should return empty if package has no content', async () => {
       fs.readLocalFile.mockResolvedValueOnce(null);
diff --git a/lib/manager/metadata.spec.ts b/lib/manager/metadata.spec.ts
index 1af7018fb2..d5f2aaecc8 100644
--- a/lib/manager/metadata.spec.ts
+++ b/lib/manager/metadata.spec.ts
@@ -1,6 +1,6 @@
 import * as fs from 'fs-extra';
 
-describe('manager metadata', () => {
+describe('manager/metadata', () => {
   const managerList: string[] = fs
     .readdirSync(__dirname, { withFileTypes: true })
     .filter((dirent) => dirent.isDirectory())
diff --git a/lib/manager/meteor/extract.spec.ts b/lib/manager/meteor/extract.spec.ts
index 1af6bd7420..cca697ee10 100644
--- a/lib/manager/meteor/extract.spec.ts
+++ b/lib/manager/meteor/extract.spec.ts
@@ -1,9 +1,9 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const input01Content = loadFixture('package-1.js');
 
-describe(getName(), () => {
+describe('manager/meteor/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns empty if fails to parse', () => {
       const res = extractPackageFile('blahhhhh:foo:@what\n');
diff --git a/lib/manager/mix/artifacts.spec.ts b/lib/manager/mix/artifacts.spec.ts
index 12ce2ee980..0878c42962 100644
--- a/lib/manager/mix/artifacts.spec.ts
+++ b/lib/manager/mix/artifacts.spec.ts
@@ -1,6 +1,6 @@
 import { join } from 'upath';
 import { envMock, exec, mockExecAll } from '../../../test/exec-util';
-import { env, fs, getName, hostRules } from '../../../test/util';
+import { env, fs, hostRules } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import * as docker from '../../util/exec/docker';
@@ -19,7 +19,7 @@ const adminConfig: RepoGlobalConfig = {
 
 const config: UpdateArtifactsConfig = {};
 
-describe(getName(), () => {
+describe('manager/mix/artifacts', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     jest.resetModules();
diff --git a/lib/manager/mix/extract.spec.ts b/lib/manager/mix/extract.spec.ts
index 157d052c17..1e6636a492 100644
--- a/lib/manager/mix/extract.spec.ts
+++ b/lib/manager/mix/extract.spec.ts
@@ -1,10 +1,10 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import { extractPackageFile } from '.';
 
 const sample = loadFixture('mix.exs');
 
-describe(getName(), () => {
+describe('manager/mix/extract', () => {
   beforeEach(() => {
     setGlobalConfig({ localDir: '' });
   });
diff --git a/lib/manager/nodenv/extract.spec.ts b/lib/manager/nodenv/extract.spec.ts
index a4058e4787..65b8ec4bea 100644
--- a/lib/manager/nodenv/extract.spec.ts
+++ b/lib/manager/nodenv/extract.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-describe(getName(), () => {
+describe('manager/nodenv/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns a result', () => {
       const res = extractPackageFile('8.4.0\n');
diff --git a/lib/manager/npm/extract/index.spec.ts b/lib/manager/npm/extract/index.spec.ts
index 92ef4ee553..9b77cf11a5 100644
--- a/lib/manager/npm/extract/index.spec.ts
+++ b/lib/manager/npm/extract/index.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../../test/util';
+import { loadFixture } from '../../../../test/util';
 import { getConfig } from '../../../config/defaults';
 import * as _fs from '../../../util/fs';
 import * as npmExtract from '.';
@@ -18,7 +18,7 @@ const workspacesSimpleContent = loadFixture(
 const vendorisedContent = loadFixture('is-object.json', '..');
 const invalidNameContent = loadFixture('invalid-name.json', '..');
 
-describe(getName(), () => {
+describe('manager/npm/extract/index', () => {
   describe('.extractPackageFile()', () => {
     beforeEach(() => {
       fs.readLocalFile = jest.fn(() => null);
diff --git a/lib/manager/npm/extract/locked-versions.spec.ts b/lib/manager/npm/extract/locked-versions.spec.ts
index 471d3042a8..2a1d5f5eb0 100644
--- a/lib/manager/npm/extract/locked-versions.spec.ts
+++ b/lib/manager/npm/extract/locked-versions.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../../../test/util';
 import { getLockedVersions } from './locked-versions';
 
 /** @type any */
@@ -9,7 +8,7 @@ const yarn = require('./yarn');
 jest.mock('./npm');
 jest.mock('./yarn');
 
-describe(getName(), () => {
+describe('manager/npm/extract/locked-versions', () => {
   describe('.getLockedVersions()', () => {
     it.each([['1.22.0'], ['2.1.0'], ['2.2.0']])(
       'uses yarn.lock with yarn v%s',
diff --git a/lib/manager/npm/extract/monorepo.spec.ts b/lib/manager/npm/extract/monorepo.spec.ts
index 0d5faf4bec..8fd569946f 100644
--- a/lib/manager/npm/extract/monorepo.spec.ts
+++ b/lib/manager/npm/extract/monorepo.spec.ts
@@ -1,9 +1,8 @@
-import { getName } from '../../../../test/util';
 import { detectMonorepos } from './monorepo';
 
 jest.mock('./pnpm');
 
-describe(getName(), () => {
+describe('manager/npm/extract/monorepo', () => {
   describe('.extractPackageFile()', () => {
     it('uses lerna package settings', async () => {
       const packageFiles = [
diff --git a/lib/manager/npm/extract/npm.spec.ts b/lib/manager/npm/extract/npm.spec.ts
index 14f37a68d5..8e704676f4 100644
--- a/lib/manager/npm/extract/npm.spec.ts
+++ b/lib/manager/npm/extract/npm.spec.ts
@@ -1,9 +1,9 @@
-import { fs, getName, loadFixture } from '../../../../test/util';
+import { fs, loadFixture } from '../../../../test/util';
 import { getNpmLock } from './npm';
 
 jest.mock('../../../util/fs');
 
-describe(getName(), () => {
+describe('manager/npm/extract/npm', () => {
   describe('.getNpmLock()', () => {
     it('returns empty if failed to parse', async () => {
       fs.readLocalFile.mockResolvedValueOnce('abcd');
diff --git a/lib/manager/npm/extract/pnpm.spec.ts b/lib/manager/npm/extract/pnpm.spec.ts
index 9f68608099..03fb0863ad 100644
--- a/lib/manager/npm/extract/pnpm.spec.ts
+++ b/lib/manager/npm/extract/pnpm.spec.ts
@@ -1,5 +1,5 @@
 import yaml from 'js-yaml';
-import { getFixturePath, getName, logger } from '../../../../test/util';
+import { getFixturePath, logger } from '../../../../test/util';
 import { setGlobalConfig } from '../../../config/global';
 import * as fs from '../../../util/fs';
 import {
@@ -8,7 +8,7 @@ import {
   findPnpmWorkspace,
 } from './pnpm';
 
-describe(getName(), () => {
+describe('manager/npm/extract/pnpm', () => {
   beforeAll(() => {
     setGlobalConfig({ localDir: getFixturePath('pnpm-monorepo/', '..') });
   });
diff --git a/lib/manager/npm/extract/type.spec.ts b/lib/manager/npm/extract/type.spec.ts
index 21cc35562b..4d7901c307 100644
--- a/lib/manager/npm/extract/type.spec.ts
+++ b/lib/manager/npm/extract/type.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../../test/util';
 import { mightBeABrowserLibrary } from './type';
 
-describe(getName(), () => {
+describe('manager/npm/extract/type', () => {
   describe('.mightBeABrowserLibrary()', () => {
     it('is not a library if private', () => {
       const isLibrary = mightBeABrowserLibrary({ private: true });
diff --git a/lib/manager/npm/extract/utils.spec.ts b/lib/manager/npm/extract/utils.spec.ts
index a818ae5b43..e0f5e3d20f 100644
--- a/lib/manager/npm/extract/utils.spec.ts
+++ b/lib/manager/npm/extract/utils.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../../test/util';
 import { matchesAnyPattern } from './utils';
 
-describe(getName(), () => {
+describe('manager/npm/extract/utils', () => {
   describe('.matchesAnyPattern()', () => {
     it('matches package in nested directory', () => {
       const packageFile = 'packages/group/a/package.json';
diff --git a/lib/manager/npm/extract/yarn.spec.ts b/lib/manager/npm/extract/yarn.spec.ts
index 4a8ad30f86..76ddd005c3 100644
--- a/lib/manager/npm/extract/yarn.spec.ts
+++ b/lib/manager/npm/extract/yarn.spec.ts
@@ -1,9 +1,9 @@
-import { fs, getName, loadFixture } from '../../../../test/util';
+import { fs, loadFixture } from '../../../../test/util';
 import { getYarnLock } from './yarn';
 
 jest.mock('../../../util/fs');
 
-describe(getName(), () => {
+describe('manager/npm/extract/yarn', () => {
   describe('.getYarnLock()', () => {
     it('returns empty if exception parsing', async () => {
       fs.readLocalFile.mockResolvedValueOnce('abcd');
diff --git a/lib/manager/npm/post-update/__snapshots__/npm.spec.ts.snap b/lib/manager/npm/post-update/__snapshots__/npm.spec.ts.snap
index bba9f26587..0abab7674b 100644
--- a/lib/manager/npm/post-update/__snapshots__/npm.spec.ts.snap
+++ b/lib/manager/npm/post-update/__snapshots__/npm.spec.ts.snap
@@ -1,10 +1,10 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`generateLockFile catches errors 1`] = `Array []`;
+exports[`manager/npm/post-update/npm catches errors 1`] = `Array []`;
 
-exports[`generateLockFile finds npm globally 1`] = `Array []`;
+exports[`manager/npm/post-update/npm finds npm globally 1`] = `Array []`;
 
-exports[`generateLockFile generates lock files 1`] = `
+exports[`manager/npm/post-update/npm generates lock files 1`] = `
 Array [
   Object {
     "cmd": "npm install --no-audit --ignore-scripts",
@@ -45,9 +45,9 @@ Array [
 ]
 `;
 
-exports[`generateLockFile performs full install 1`] = `Array []`;
+exports[`manager/npm/post-update/npm performs full install 1`] = `Array []`;
 
-exports[`generateLockFile performs lock file maintenance 1`] = `
+exports[`manager/npm/post-update/npm performs lock file maintenance 1`] = `
 Array [
   Object {
     "cmd": "npm install --package-lock-only --no-audit --ignore-scripts",
@@ -70,7 +70,7 @@ Array [
 ]
 `;
 
-exports[`generateLockFile performs lock file updates 1`] = `
+exports[`manager/npm/post-update/npm performs lock file updates 1`] = `
 Array [
   Object {
     "cmd": "npm install --package-lock-only --no-audit --ignore-scripts some-dep@1.0.1",
@@ -93,8 +93,8 @@ Array [
 ]
 `;
 
-exports[`generateLockFile performs npm-shrinkwrap.json updates (no package-lock.json) 1`] = `Array []`;
+exports[`manager/npm/post-update/npm performs npm-shrinkwrap.json updates (no package-lock.json) 1`] = `Array []`;
 
-exports[`generateLockFile performs npm-shrinkwrap.json updates 1`] = `Array []`;
+exports[`manager/npm/post-update/npm performs npm-shrinkwrap.json updates 1`] = `Array []`;
 
-exports[`generateLockFile uses docker npm 1`] = `Array []`;
+exports[`manager/npm/post-update/npm uses docker npm 1`] = `Array []`;
diff --git a/lib/manager/npm/post-update/__snapshots__/pnpm.spec.ts.snap b/lib/manager/npm/post-update/__snapshots__/pnpm.spec.ts.snap
index 7a6094cd1e..5a51f42435 100644
--- a/lib/manager/npm/post-update/__snapshots__/pnpm.spec.ts.snap
+++ b/lib/manager/npm/post-update/__snapshots__/pnpm.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`generateLockFile catches errors 1`] = `
+exports[`manager/npm/post-update/pnpm catches errors 1`] = `
 Array [
   Object {
     "cmd": "pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfile",
@@ -23,7 +23,7 @@ Array [
 ]
 `;
 
-exports[`generateLockFile finds pnpm globally 1`] = `
+exports[`manager/npm/post-update/pnpm finds pnpm globally 1`] = `
 Array [
   Object {
     "cmd": "pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfile",
@@ -46,7 +46,7 @@ Array [
 ]
 `;
 
-exports[`generateLockFile generates lock files 1`] = `
+exports[`manager/npm/post-update/pnpm generates lock files 1`] = `
 Array [
   Object {
     "cmd": "pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfile",
@@ -69,7 +69,7 @@ Array [
 ]
 `;
 
-exports[`generateLockFile performs lock file maintenance 1`] = `
+exports[`manager/npm/post-update/pnpm performs lock file maintenance 1`] = `
 Array [
   Object {
     "cmd": "pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfile",
diff --git a/lib/manager/npm/post-update/lerna.spec.ts b/lib/manager/npm/post-update/lerna.spec.ts
index 5a7fd03c05..8ce00a043f 100644
--- a/lib/manager/npm/post-update/lerna.spec.ts
+++ b/lib/manager/npm/post-update/lerna.spec.ts
@@ -1,6 +1,6 @@
 import { exec as _exec } from 'child_process';
 import { envMock, mockExecAll } from '../../../../test/exec-util';
-import { getName, mocked } from '../../../../test/util';
+import { mocked } from '../../../../test/util';
 import { setGlobalConfig } from '../../../config/global';
 import * as _env from '../../../util/exec/env';
 import * as _lernaHelper from './lerna';
@@ -25,7 +25,7 @@ function lernaPkgFileWithoutLernaDep(lernaClient: string) {
     lernaClient,
   };
 }
-describe(getName(), () => {
+describe('manager/npm/post-update/lerna', () => {
   describe('generateLockFiles()', () => {
     beforeEach(() => {
       jest.resetAllMocks();
diff --git a/lib/manager/npm/post-update/node-version.spec.ts b/lib/manager/npm/post-update/node-version.spec.ts
index a73bf616ae..08db7fa911 100644
--- a/lib/manager/npm/post-update/node-version.spec.ts
+++ b/lib/manager/npm/post-update/node-version.spec.ts
@@ -4,7 +4,7 @@ import { getNodeConstraint } from './node-version';
 
 jest.mock('../../../util/fs');
 
-describe('getNodeConstraint', () => {
+describe('manager/npm/post-update/node-version', () => {
   const config = {
     packageFile: 'package.json',
     constraints: { node: '^12.16.0' },
diff --git a/lib/manager/npm/post-update/npm.spec.ts b/lib/manager/npm/post-update/npm.spec.ts
index 5add5ecd82..11a2949620 100644
--- a/lib/manager/npm/post-update/npm.spec.ts
+++ b/lib/manager/npm/post-update/npm.spec.ts
@@ -16,7 +16,7 @@ const exec: jest.Mock<typeof _exec> = _exec as any;
 const env = mocked(_env);
 const fs = mocked(_fs);
 
-describe('generateLockFile', () => {
+describe('manager/npm/post-update/npm', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     jest.resetModules();
diff --git a/lib/manager/npm/post-update/pnpm.spec.ts b/lib/manager/npm/post-update/pnpm.spec.ts
index 195690f3d4..fa9822cc63 100644
--- a/lib/manager/npm/post-update/pnpm.spec.ts
+++ b/lib/manager/npm/post-update/pnpm.spec.ts
@@ -17,7 +17,7 @@ const fs = mocked(_fs);
 const pnpmHelper = mocked(_pnpmHelper);
 delete process.env.NPM_CONFIG_CACHE;
 
-describe('generateLockFile', () => {
+describe('manager/npm/post-update/pnpm', () => {
   let config: PostUpdateConfig;
   beforeEach(() => {
     config = { cacheDir: 'some-cache-dir', constraints: { pnpm: '^2.0.0' } };
diff --git a/lib/manager/npm/post-update/rules.spec.ts b/lib/manager/npm/post-update/rules.spec.ts
index 2757e87fd4..9406b335d7 100644
--- a/lib/manager/npm/post-update/rules.spec.ts
+++ b/lib/manager/npm/post-update/rules.spec.ts
@@ -1,8 +1,7 @@
-import { getName } from '../../../../test/util';
 import * as hostRules from '../../../util/host-rules';
 import { processHostRules } from './rules';
 
-describe(getName(), () => {
+describe('manager/npm/post-update/rules', () => {
   describe('processHostRules()', () => {
     beforeEach(() => {
       hostRules.clear();
diff --git a/lib/manager/npm/post-update/yarn.spec.ts b/lib/manager/npm/post-update/yarn.spec.ts
index 87cfb3cfed..bf3beecd67 100644
--- a/lib/manager/npm/post-update/yarn.spec.ts
+++ b/lib/manager/npm/post-update/yarn.spec.ts
@@ -4,7 +4,7 @@ import {
   envMock,
   mockExecAll,
 } from '../../../../test/exec-util';
-import { fs, getName, mocked } from '../../../../test/util';
+import { fs, mocked } from '../../../../test/util';
 import * as _env from '../../../util/exec/env';
 import * as _yarnHelper from './yarn';
 
@@ -26,7 +26,7 @@ const fixSnapshots = (snapshots: ExecSnapshots): ExecSnapshots =>
     cmd: snapshot.cmd.replace(/^.*\/yarn.*?\.js\s+/, '<yarn> '),
   }));
 
-describe(getName(), () => {
+describe('manager/npm/post-update/yarn', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     jest.resetModules();
diff --git a/lib/manager/npm/range.spec.ts b/lib/manager/npm/range.spec.ts
index ad3a1aaf71..89bda5778a 100644
--- a/lib/manager/npm/range.spec.ts
+++ b/lib/manager/npm/range.spec.ts
@@ -1,7 +1,7 @@
 import type { RangeConfig } from '../types';
 import { getRangeStrategy } from '.';
 
-describe('getRangeStrategy', () => {
+describe('manager/npm/range', () => {
   it('returns same if not auto', () => {
     const config: RangeConfig = { rangeStrategy: 'widen' };
     expect(getRangeStrategy(config)).toEqual('widen');
diff --git a/lib/manager/npm/update/dependency/index.spec.ts b/lib/manager/npm/update/dependency/index.spec.ts
index 4d6d904a37..0d81ce7cf6 100644
--- a/lib/manager/npm/update/dependency/index.spec.ts
+++ b/lib/manager/npm/update/dependency/index.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../../../test/util';
+import { loadFixture } from '../../../../../test/util';
 import * as npmUpdater from '.';
 
 const readFixture = (x: string): string => loadFixture(x, '../..');
@@ -6,7 +6,7 @@ const readFixture = (x: string): string => loadFixture(x, '../..');
 const input01Content = readFixture('inputs/01.json');
 const input01GlobContent = readFixture('inputs/01-glob.json');
 
-describe(getName(), () => {
+describe('manager/npm/update/dependency/index', () => {
   describe('.updateDependency(fileContent, depType, depName, newValue)', () => {
     it('replaces a dependency value', () => {
       const upgrade = {
diff --git a/lib/manager/npm/update/locked-dependency/dep-constraints.spec.ts b/lib/manager/npm/update/locked-dependency/dep-constraints.spec.ts
index 172fce3c57..d5c7effca9 100644
--- a/lib/manager/npm/update/locked-dependency/dep-constraints.spec.ts
+++ b/lib/manager/npm/update/locked-dependency/dep-constraints.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadJsonFixture } from '../../../../../test/util';
+import { loadJsonFixture } from '../../../../../test/util';
 import { findDepConstraints } from './dep-constraints';
 
 jest.mock('../../../../util/fs');
@@ -6,7 +6,7 @@ jest.mock('../../../../util/fs');
 const packageJson = loadJsonFixture('package.json');
 const packageLockJson = loadJsonFixture('package-lock.json');
 
-describe(getName(), () => {
+describe('manager/npm/update/locked-dependency/dep-constraints', () => {
   describe('findDepConstraints()', () => {
     it('finds indirect dependency', () => {
       // FIXME: explicit assert condition
diff --git a/lib/manager/npm/update/locked-dependency/get-locked.spec.ts b/lib/manager/npm/update/locked-dependency/get-locked.spec.ts
index 9b2f4a6507..1c0ad4c656 100644
--- a/lib/manager/npm/update/locked-dependency/get-locked.spec.ts
+++ b/lib/manager/npm/update/locked-dependency/get-locked.spec.ts
@@ -1,11 +1,11 @@
-import { getName, loadJsonFixture } from '../../../../../test/util';
+import { loadJsonFixture } from '../../../../../test/util';
 import { getLockedDependencies } from './get-locked';
 
 jest.mock('../../../../util/fs');
 
 const packageLockJson = loadJsonFixture('package-lock.json');
 
-describe(getName(), () => {
+describe('manager/npm/update/locked-dependency/get-locked', () => {
   describe('getLockedDependencies()', () => {
     it('handles error', () => {
       expect(getLockedDependencies(null as any, 'some-dep', '1.0.0')).toEqual(
diff --git a/lib/manager/npm/update/locked-dependency/index.spec.ts b/lib/manager/npm/update/locked-dependency/index.spec.ts
index 36a688f6ab..910b6713d7 100644
--- a/lib/manager/npm/update/locked-dependency/index.spec.ts
+++ b/lib/manager/npm/update/locked-dependency/index.spec.ts
@@ -1,5 +1,5 @@
 import * as httpMock from '../../../../../test/http-mock';
-import { getName, loadFixture } from '../../../../../test/util';
+import { loadFixture } from '../../../../../test/util';
 import { clone } from '../../../../util/clone';
 import type { UpdateLockedConfig } from '../../../types';
 import { updateLockedDependency } from '.';
@@ -13,7 +13,7 @@ const serveStaticJson = JSON.parse(loadFixture('serve-static.json'));
 const sendJson = JSON.parse(loadFixture('send.json'));
 const typeIsJson = JSON.parse(loadFixture('type-is.json'));
 
-describe(getName(), () => {
+describe('manager/npm/update/locked-dependency/index', () => {
   describe('updateLockedDependency()', () => {
     let config: UpdateLockedConfig;
     beforeEach(() => {
diff --git a/lib/manager/npm/update/locked-dependency/parent-version.spec.ts b/lib/manager/npm/update/locked-dependency/parent-version.spec.ts
index 5e98013193..b69240da05 100644
--- a/lib/manager/npm/update/locked-dependency/parent-version.spec.ts
+++ b/lib/manager/npm/update/locked-dependency/parent-version.spec.ts
@@ -1,10 +1,10 @@
 import * as httpMock from '../../../../../test/http-mock';
-import { getName, loadJsonFixture } from '../../../../../test/util';
+import { loadJsonFixture } from '../../../../../test/util';
 import { findFirstParentVersion } from './parent-version';
 
 const expressJson = loadJsonFixture('express.json');
 
-describe(getName(), () => {
+describe('manager/npm/update/locked-dependency/parent-version', () => {
   describe('getLockedDependencies()', () => {
     it('finds indirect dependency', async () => {
       httpMock
diff --git a/lib/manager/npm/update/package-version/index.spec.ts b/lib/manager/npm/update/package-version/index.spec.ts
index 6df6e27549..4a724ae085 100644
--- a/lib/manager/npm/update/package-version/index.spec.ts
+++ b/lib/manager/npm/update/package-version/index.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../../../test/util';
 import * as npmUpdater from '.';
 
-describe(getName(), () => {
+describe('manager/npm/update/package-version/index', () => {
   describe('.bumpPackageVersion()', () => {
     const content = JSON.stringify({
       name: 'some-package',
diff --git a/lib/manager/nuget/__snapshots__/artifacts.spec.ts.snap b/lib/manager/nuget/__snapshots__/artifacts.spec.ts.snap
index 24488ed845..da697c5b33 100644
--- a/lib/manager/nuget/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/nuget/__snapshots__/artifacts.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`updateArtifacts aborts if lock file is unchanged 1`] = `
+exports[`manager/nuget/artifacts aborts if lock file is unchanged 1`] = `
 Array [
   Object {
     "cmd": "dotnet restore project.csproj --force-evaluate --configfile others/nuget/not-so-random/nuget.config",
@@ -23,9 +23,9 @@ Array [
 ]
 `;
 
-exports[`updateArtifacts aborts if no lock file found 1`] = `Array []`;
+exports[`manager/nuget/artifacts aborts if no lock file found 1`] = `Array []`;
 
-exports[`updateArtifacts authenticates at registries 1`] = `
+exports[`manager/nuget/artifacts authenticates at registries 1`] = `
 Array [
   Object {
     "cmd": "dotnet nuget add source https://my-registry.example.org/ --configfile others/nuget/not-so-random/nuget.config --name myRegistry --username some-username --password some-password --store-password-in-clear-text",
@@ -66,7 +66,7 @@ Array [
 ]
 `;
 
-exports[`updateArtifacts catches errors 1`] = `
+exports[`manager/nuget/artifacts catches errors 1`] = `
 Array [
   Object {
     "artifactError": Object {
@@ -77,11 +77,11 @@ Array [
 ]
 `;
 
-exports[`updateArtifacts does not update lock file when no deps changed 1`] = `Array []`;
+exports[`manager/nuget/artifacts does not update lock file when no deps changed 1`] = `Array []`;
 
-exports[`updateArtifacts does not update lock file when non-proj file is changed 1`] = `Array []`;
+exports[`manager/nuget/artifacts does not update lock file when non-proj file is changed 1`] = `Array []`;
 
-exports[`updateArtifacts performs lock file maintenance 1`] = `
+exports[`manager/nuget/artifacts performs lock file maintenance 1`] = `
 Array [
   Object {
     "cmd": "dotnet restore project.csproj --force-evaluate --configfile others/nuget/not-so-random/nuget.config",
@@ -104,7 +104,7 @@ Array [
 ]
 `;
 
-exports[`updateArtifacts strips protocol version from feed url 1`] = `
+exports[`manager/nuget/artifacts strips protocol version from feed url 1`] = `
 Array [
   Object {
     "cmd": "dotnet nuget add source https://my-registry.example.org/ --configfile others/nuget/not-so-random/nuget.config --name myRegistry",
@@ -145,7 +145,7 @@ Array [
 ]
 `;
 
-exports[`updateArtifacts supports docker mode 1`] = `
+exports[`manager/nuget/artifacts supports docker mode 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/dotnet",
@@ -180,7 +180,7 @@ Array [
 ]
 `;
 
-exports[`updateArtifacts supports global mode 1`] = `
+exports[`manager/nuget/artifacts supports global mode 1`] = `
 Array [
   Object {
     "cmd": "dotnet restore project.csproj --force-evaluate --configfile others/nuget/not-so-random/nuget.config",
@@ -203,7 +203,7 @@ Array [
 ]
 `;
 
-exports[`updateArtifacts updates lock file 1`] = `
+exports[`manager/nuget/artifacts updates lock file 1`] = `
 Array [
   Object {
     "cmd": "dotnet restore project.csproj --force-evaluate --configfile others/nuget/not-so-random/nuget.config",
diff --git a/lib/manager/nuget/artifacts.spec.ts b/lib/manager/nuget/artifacts.spec.ts
index 8135db783e..0a692be875 100644
--- a/lib/manager/nuget/artifacts.spec.ts
+++ b/lib/manager/nuget/artifacts.spec.ts
@@ -39,7 +39,7 @@ const adminConfig: RepoGlobalConfig = {
 
 const config: UpdateArtifactsConfig = {};
 
-describe('updateArtifacts', () => {
+describe('manager/nuget/artifacts', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     jest.resetModules();
diff --git a/lib/manager/nuget/extract.spec.ts b/lib/manager/nuget/extract.spec.ts
index 4869e8d288..af9392d505 100644
--- a/lib/manager/nuget/extract.spec.ts
+++ b/lib/manager/nuget/extract.spec.ts
@@ -1,5 +1,5 @@
 import * as upath from 'upath';
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import type { ExtractConfig } from '../types';
@@ -11,7 +11,7 @@ const adminConfig: RepoGlobalConfig = {
   localDir: upath.resolve('lib/manager/nuget/__fixtures__'),
 };
 
-describe(getName(), () => {
+describe('manager/nuget/extract', () => {
   describe('extractPackageFile()', () => {
     beforeEach(() => {
       setGlobalConfig(adminConfig);
diff --git a/lib/manager/nvm/extract.spec.ts b/lib/manager/nvm/extract.spec.ts
index a4058e4787..6cd92c8dba 100644
--- a/lib/manager/nvm/extract.spec.ts
+++ b/lib/manager/nvm/extract.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-describe(getName(), () => {
+describe('manager/nvm/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns a result', () => {
       const res = extractPackageFile('8.4.0\n');
diff --git a/lib/manager/pip-compile/__snapshots__/artifacts.spec.ts.snap b/lib/manager/pip-compile/__snapshots__/artifacts.spec.ts.snap
index 7fa37078f8..ee186ca9e8 100644
--- a/lib/manager/pip-compile/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/pip-compile/__snapshots__/artifacts.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`.updateArtifacts() catches errors 1`] = `
+exports[`manager/pip-compile/artifacts catches errors 1`] = `
 Array [
   Object {
     "artifactError": Object {
@@ -11,7 +11,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns null if unchanged 1`] = `
+exports[`manager/pip-compile/artifacts returns null if unchanged 1`] = `
 Array [
   Object {
     "cmd": "pip-compile",
@@ -34,7 +34,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated requirements.txt 1`] = `
+exports[`manager/pip-compile/artifacts returns updated requirements.txt 1`] = `
 Array [
   Object {
     "cmd": "pip-compile",
@@ -57,7 +57,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated requirements.txt when doing lockfile maintenance 1`] = `
+exports[`manager/pip-compile/artifacts returns updated requirements.txt when doing lockfile maintenance 1`] = `
 Array [
   Object {
     "cmd": "pip-compile",
@@ -80,7 +80,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() supports docker mode 1`] = `
+exports[`manager/pip-compile/artifacts supports docker mode 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/python",
@@ -115,7 +115,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() uses pipenv version from config 1`] = `
+exports[`manager/pip-compile/artifacts uses pipenv version from config 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/python",
diff --git a/lib/manager/pip-compile/artifacts.spec.ts b/lib/manager/pip-compile/artifacts.spec.ts
index a89dd267f2..3c64357c33 100644
--- a/lib/manager/pip-compile/artifacts.spec.ts
+++ b/lib/manager/pip-compile/artifacts.spec.ts
@@ -32,7 +32,7 @@ const dockerAdminConfig = { ...adminConfig, binarySource: 'docker' };
 const config: UpdateArtifactsConfig = {};
 const lockMaintenanceConfig = { ...config, isLockFileMaintenance: true };
 
-describe('.updateArtifacts()', () => {
+describe('manager/pip-compile/artifacts', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     env.getChildProcessEnv.mockReturnValue({
diff --git a/lib/manager/pip_requirements/artifacts.spec.ts b/lib/manager/pip_requirements/artifacts.spec.ts
index 04a5b2ad5e..798025ef7a 100644
--- a/lib/manager/pip_requirements/artifacts.spec.ts
+++ b/lib/manager/pip_requirements/artifacts.spec.ts
@@ -15,7 +15,7 @@ const newPackageFileContent = `atomicwrites==1.4.0 \
 --hash=sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4 \
 --hash=sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6`;
 
-describe('.updateArtifacts()', () => {
+describe('manager/pip_requirements/artifacts', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     jest.resetModules();
diff --git a/lib/manager/pip_requirements/extract.spec.ts b/lib/manager/pip_requirements/extract.spec.ts
index 27f78289a9..db292c2191 100644
--- a/lib/manager/pip_requirements/extract.spec.ts
+++ b/lib/manager/pip_requirements/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import { extractPackageFile } from './extract';
 
@@ -10,7 +10,7 @@ const requirements5 = loadFixture('requirements5.txt');
 const requirements6 = loadFixture('requirements6.txt');
 const requirements7 = loadFixture('requirements7.txt');
 
-describe(getName(), () => {
+describe('manager/pip_requirements/extract', () => {
   beforeEach(() => {
     delete process.env.PIP_TEST_TOKEN;
     setGlobalConfig();
diff --git a/lib/manager/pip_requirements/range.spec.ts b/lib/manager/pip_requirements/range.spec.ts
index 413bf2e7c3..00d2861330 100644
--- a/lib/manager/pip_requirements/range.spec.ts
+++ b/lib/manager/pip_requirements/range.spec.ts
@@ -1,7 +1,7 @@
 import type { RangeConfig } from '../types';
 import { getRangeStrategy } from '.';
 
-describe('getRangeStrategy', () => {
+describe('manager/pip_requirements/range', () => {
   it('returns same if not auto', () => {
     const config: RangeConfig = { rangeStrategy: 'widen' };
     expect(getRangeStrategy(config)).toEqual('widen');
diff --git a/lib/manager/pip_setup/extract.spec.ts b/lib/manager/pip_setup/extract.spec.ts
index 70b7a8fbc6..9af134d966 100644
--- a/lib/manager/pip_setup/extract.spec.ts
+++ b/lib/manager/pip_setup/extract.spec.ts
@@ -1,5 +1,5 @@
 import { envMock, exec, mockExecSequence } from '../../../test/exec-util';
-import { env, getName } from '../../../test/util';
+import { env } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import {
   getPythonAlias,
@@ -11,7 +11,7 @@ import {
 jest.mock('child_process');
 jest.mock('../../util/exec/env');
 
-describe(getName(), () => {
+describe('manager/pip_setup/extract', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     jest.resetModules();
diff --git a/lib/manager/pip_setup/index.spec.ts b/lib/manager/pip_setup/index.spec.ts
index e34362a08e..de5380d6bb 100644
--- a/lib/manager/pip_setup/index.spec.ts
+++ b/lib/manager/pip_setup/index.spec.ts
@@ -5,7 +5,7 @@ import {
   mockExecAll,
   mockExecSequence,
 } from '../../../test/exec-util';
-import { env, getName, loadFixture } from '../../../test/util';
+import { env, loadFixture } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import * as fs from '../../util/fs';
@@ -39,7 +39,7 @@ const fixSnapshots = (snapshots: ExecSnapshots): ExecSnapshots =>
     cmd: snapshot.cmd.replace(/^.*extract\.py"\s+/, '<extract.py> '),
   }));
 
-describe(getName(), () => {
+describe('manager/pip_setup/index', () => {
   describe('extractPackageFile()', () => {
     beforeEach(() => {
       jest.resetAllMocks();
diff --git a/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap b/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap
index 991f4da5db..ba04fe5ad9 100644
--- a/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`.updateArtifacts() catches errors 1`] = `
+exports[`manager/pipenv/artifacts catches errors 1`] = `
 Array [
   Object {
     "artifactError": Object {
@@ -11,7 +11,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() handles no constraint 1`] = `
+exports[`manager/pipenv/artifacts handles no constraint 1`] = `
 Array [
   Object {
     "cmd": "pipenv lock",
@@ -35,7 +35,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns null if unchanged 1`] = `
+exports[`manager/pipenv/artifacts returns null if unchanged 1`] = `
 Array [
   Object {
     "cmd": "pipenv lock",
@@ -59,7 +59,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated Pipenv.lock when doing lockfile maintenance 1`] = `
+exports[`manager/pipenv/artifacts returns updated Pipenv.lock when doing lockfile maintenance 1`] = `
 Array [
   Object {
     "cmd": "pipenv lock",
@@ -83,7 +83,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated Pipfile.lock 1`] = `
+exports[`manager/pipenv/artifacts returns updated Pipfile.lock 1`] = `
 Array [
   Object {
     "cmd": "pipenv lock",
@@ -107,7 +107,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() supports docker mode 1`] = `
+exports[`manager/pipenv/artifacts supports docker mode 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/python:latest",
@@ -143,7 +143,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() uses pipenv version from Pipfile 1`] = `
+exports[`manager/pipenv/artifacts uses pipenv version from Pipfile 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/python",
@@ -179,7 +179,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() uses pipenv version from Pipfile dev packages 1`] = `
+exports[`manager/pipenv/artifacts uses pipenv version from Pipfile dev packages 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/python",
@@ -215,7 +215,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() uses pipenv version from config 1`] = `
+exports[`manager/pipenv/artifacts uses pipenv version from config 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/python",
diff --git a/lib/manager/pipenv/artifacts.spec.ts b/lib/manager/pipenv/artifacts.spec.ts
index 6c4e0a5172..c4733af3b8 100644
--- a/lib/manager/pipenv/artifacts.spec.ts
+++ b/lib/manager/pipenv/artifacts.spec.ts
@@ -32,7 +32,7 @@ const dockerAdminConfig = { ...adminConfig, binarySource: 'docker' };
 const config: UpdateArtifactsConfig = {};
 const lockMaintenanceConfig = { ...config, isLockFileMaintenance: true };
 
-describe('.updateArtifacts()', () => {
+describe('manager/pipenv/artifacts', () => {
   let pipFileLock;
   beforeEach(() => {
     jest.resetAllMocks();
diff --git a/lib/manager/pipenv/extract.spec.ts b/lib/manager/pipenv/extract.spec.ts
index e6077430df..88804599b4 100644
--- a/lib/manager/pipenv/extract.spec.ts
+++ b/lib/manager/pipenv/extract.spec.ts
@@ -1,4 +1,4 @@
-import { fs as fsutil, getName, loadFixture } from '../../../test/util';
+import { fs as fsutil, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 jest.mock('../../util/fs');
@@ -9,7 +9,7 @@ const pipfile3 = loadFixture('Pipfile3');
 const pipfile4 = loadFixture('Pipfile4');
 const pipfile5 = loadFixture('Pipfile5');
 
-describe(getName(), () => {
+describe('manager/pipenv/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', async () => {
       expect(await extractPackageFile('[packages]\r\n', 'Pipfile')).toBeNull();
diff --git a/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap b/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap
index 0ac8920c45..daeea84f58 100644
--- a/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`.updateArtifacts() catches errors 1`] = `
+exports[`manager/poetry/artifacts catches errors 1`] = `
 Array [
   Object {
     "artifactError": Object {
@@ -12,7 +12,7 @@ undefined",
 ]
 `;
 
-exports[`.updateArtifacts() passes private credential environment vars 1`] = `
+exports[`manager/poetry/artifacts passes private credential environment vars 1`] = `
 Array [
   Object {
     "cmd": "poetry update --lock --no-interaction dep1",
@@ -39,7 +39,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns null if unchanged 1`] = `
+exports[`manager/poetry/artifacts returns null if unchanged 1`] = `
 Array [
   Object {
     "cmd": "poetry update --lock --no-interaction dep1",
@@ -62,7 +62,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated poetry.lock 1`] = `
+exports[`manager/poetry/artifacts returns updated poetry.lock 1`] = `
 Array [
   Object {
     "cmd": "poetry update --lock --no-interaction dep1",
@@ -85,7 +85,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated poetry.lock using docker (constraints) 1`] = `
+exports[`manager/poetry/artifacts returns updated poetry.lock using docker (constraints) 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/python:2.7.5",
@@ -120,7 +120,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated poetry.lock using docker 1`] = `
+exports[`manager/poetry/artifacts returns updated poetry.lock using docker 1`] = `
 Array [
   Object {
     "cmd": "docker pull renovate/python:3.4.2",
@@ -155,7 +155,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated poetry.lock when doing lockfile maintenance 1`] = `
+exports[`manager/poetry/artifacts returns updated poetry.lock when doing lockfile maintenance 1`] = `
 Array [
   Object {
     "cmd": "poetry update --lock --no-interaction",
@@ -178,7 +178,7 @@ Array [
 ]
 `;
 
-exports[`.updateArtifacts() returns updated pyproject.lock 1`] = `
+exports[`manager/poetry/artifacts returns updated pyproject.lock 1`] = `
 Array [
   Object {
     "cmd": "poetry update --lock --no-interaction dep1",
diff --git a/lib/manager/poetry/artifacts.spec.ts b/lib/manager/poetry/artifacts.spec.ts
index 23faef026f..357878b605 100644
--- a/lib/manager/poetry/artifacts.spec.ts
+++ b/lib/manager/poetry/artifacts.spec.ts
@@ -32,7 +32,7 @@ const adminConfig: RepoGlobalConfig = {
 
 const config: UpdateArtifactsConfig = {};
 
-describe('.updateArtifacts()', () => {
+describe('manager/poetry/artifacts', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     env.getChildProcessEnv.mockReturnValue(envMock.basic);
diff --git a/lib/manager/poetry/extract.spec.ts b/lib/manager/poetry/extract.spec.ts
index 6cb8ebf9d2..cf88773a4c 100644
--- a/lib/manager/poetry/extract.spec.ts
+++ b/lib/manager/poetry/extract.spec.ts
@@ -1,4 +1,4 @@
-import { fs, getName, loadFixture } from '../../../test/util';
+import { fs, loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 jest.mock('../../util/fs');
@@ -17,7 +17,7 @@ const pyproject9toml = loadFixture('pyproject.9.toml');
 const pyproject11toml = loadFixture('pyproject.11.toml');
 const pyproject11tomlLock = loadFixture('pyproject.11.toml.lock');
 
-describe(getName(), () => {
+describe('manager/poetry/extract', () => {
   describe('extractPackageFile()', () => {
     let filename: string;
     const OLD_ENV = process.env;
diff --git a/lib/manager/pre-commit/extract.spec.ts b/lib/manager/pre-commit/extract.spec.ts
index a5fde2101b..78dd6eb41c 100644
--- a/lib/manager/pre-commit/extract.spec.ts
+++ b/lib/manager/pre-commit/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture, mocked } from '../../../test/util';
+import { loadFixture, mocked } from '../../../test/util';
 import * as _hostRules from '../../util/host-rules';
 import { extractPackageFile } from './extract';
 
@@ -19,7 +19,7 @@ const enterpriseGitPrecommitConfig = loadFixture(
   'enterprise.pre-commit-config.yaml'
 );
 
-describe(getName(), () => {
+describe('manager/pre-commit/extract', () => {
   describe('extractPackageFile()', () => {
     beforeEach(() => {
       jest.resetAllMocks();
diff --git a/lib/manager/pub/extract.spec.ts b/lib/manager/pub/extract.spec.ts
index 637726b897..7af68440e3 100644
--- a/lib/manager/pub/extract.spec.ts
+++ b/lib/manager/pub/extract.spec.ts
@@ -1,10 +1,10 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from '.';
 
 const brokenYaml = loadFixture('update.yaml');
 const packageFile = loadFixture('extract.yaml');
 
-describe(getName(), () => {
+describe('manager/pub/extract', () => {
   describe('extractPackageFile', () => {
     it('should return null if package does not contain any deps', () => {
       const res = extractPackageFile('foo: bar', 'pubspec.yaml');
diff --git a/lib/manager/pyenv/extract.spec.ts b/lib/manager/pyenv/extract.spec.ts
index ae9e37cc25..1131abc0ec 100644
--- a/lib/manager/pyenv/extract.spec.ts
+++ b/lib/manager/pyenv/extract.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-describe(getName(), () => {
+describe('manager/pyenv/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns a result', () => {
       const res = extractPackageFile('3.7.1\n');
diff --git a/lib/manager/range.spec.ts b/lib/manager/range.spec.ts
index 8e0ac406a1..4726cc910e 100644
--- a/lib/manager/range.spec.ts
+++ b/lib/manager/range.spec.ts
@@ -1,7 +1,7 @@
 import type { RangeConfig } from './types';
 import { getRangeStrategy } from '.';
 
-describe('getRangeStrategy', () => {
+describe('manager/range', () => {
   it('returns same if not auto', () => {
     const config: RangeConfig = {
       manager: 'npm',
diff --git a/lib/manager/regex/index.spec.ts b/lib/manager/regex/index.spec.ts
index cf64e8c36f..cdd1f6c060 100644
--- a/lib/manager/regex/index.spec.ts
+++ b/lib/manager/regex/index.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { logger } from '../../logger';
 import type { CustomExtractConfig } from '../types';
 import { defaultConfig, extractPackageFile } from '.';
@@ -8,7 +8,7 @@ const ansibleYamlContent = loadFixture(`ansible.yml`);
 const exampleJsonContent = loadFixture(`example.json`);
 const exampleGitlabCiYml = loadFixture(`gitlab-ci.yml`);
 
-describe(getName(), () => {
+describe('manager/regex/index', () => {
   it('has default config', () => {
     expect(defaultConfig).toEqual({
       pinDigests: false,
diff --git a/lib/manager/ruby-version/extract.spec.ts b/lib/manager/ruby-version/extract.spec.ts
index a4058e4787..dbec0235de 100644
--- a/lib/manager/ruby-version/extract.spec.ts
+++ b/lib/manager/ruby-version/extract.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-describe(getName(), () => {
+describe('manager/ruby-version/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns a result', () => {
       const res = extractPackageFile('8.4.0\n');
diff --git a/lib/manager/sbt/extract.spec.ts b/lib/manager/sbt/extract.spec.ts
index 06b609ae42..0c5d436bad 100644
--- a/lib/manager/sbt/extract.spec.ts
+++ b/lib/manager/sbt/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const sbt = loadFixture(`sample.sbt`);
@@ -9,7 +9,7 @@ const sbtPrivateVariableDependencyFile = loadFixture(
   `private-variable-dependency-file.scala`
 );
 
-describe(getName(), () => {
+describe('manager/sbt/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile(null)).toBeNull();
diff --git a/lib/manager/sbt/update.spec.ts b/lib/manager/sbt/update.spec.ts
index dcf0490fff..c23e93fbfc 100644
--- a/lib/manager/sbt/update.spec.ts
+++ b/lib/manager/sbt/update.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import * as sbtUpdater from './update';
 
-describe(getName(), () => {
+describe('manager/sbt/update', () => {
   describe('.bumpPackageVersion()', () => {
     const content =
       'name := "test"\n' +
diff --git a/lib/manager/setup-cfg/extract.spec.ts b/lib/manager/setup-cfg/extract.spec.ts
index c00d930022..d7978e6a20 100644
--- a/lib/manager/setup-cfg/extract.spec.ts
+++ b/lib/manager/setup-cfg/extract.spec.ts
@@ -1,9 +1,9 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const content = loadFixture('setup-cfg-1.txt');
 
-describe(getName(), () => {
+describe('manager/setup-cfg/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('nothing here')).toBeNull();
diff --git a/lib/manager/setup-cfg/range.spec.ts b/lib/manager/setup-cfg/range.spec.ts
index 2745c51e3f..5f6cc87964 100644
--- a/lib/manager/setup-cfg/range.spec.ts
+++ b/lib/manager/setup-cfg/range.spec.ts
@@ -1,7 +1,7 @@
 import type { RangeConfig } from '../types';
 import { getRangeStrategy } from '.';
 
-describe('getRangeStrategy', () => {
+describe('manager/setup-cfg/range', () => {
   it('returns same if not auto', () => {
     const config: RangeConfig = { rangeStrategy: 'widen' };
     expect(getRangeStrategy(config)).toEqual('widen');
diff --git a/lib/manager/swift/index.spec.ts b/lib/manager/swift/index.spec.ts
index 98e72a62e8..c5dba98d7f 100644
--- a/lib/manager/swift/index.spec.ts
+++ b/lib/manager/swift/index.spec.ts
@@ -1,9 +1,9 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const pkgContent = loadFixture(`SamplePackage.swift`);
 
-describe(getName(), () => {
+describe('manager/swift/index', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty content', () => {
       expect(extractPackageFile(null)).toBeNull();
diff --git a/lib/manager/terraform-version/extract.spec.ts b/lib/manager/terraform-version/extract.spec.ts
index 00bf01f61d..7bc0d51f2c 100644
--- a/lib/manager/terraform-version/extract.spec.ts
+++ b/lib/manager/terraform-version/extract.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-describe(getName(), () => {
+describe('manager/terraform-version/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns a result', () => {
       const res = extractPackageFile('12.0.0\n');
diff --git a/lib/manager/terraform/extract.spec.ts b/lib/manager/terraform/extract.spec.ts
index a8b06a6ee5..90f9abc5bd 100644
--- a/lib/manager/terraform/extract.spec.ts
+++ b/lib/manager/terraform/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const tf1 = loadFixture('1.tf');
@@ -8,7 +8,7 @@ const tf2 = `module "relative" {
 `;
 const helm = loadFixture('helm.tf');
 
-describe(getName(), () => {
+describe('manager/terraform/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('nothing here')).toBeNull();
diff --git a/lib/manager/terraform/lockfile/hash.spec.ts b/lib/manager/terraform/lockfile/hash.spec.ts
index 14228e2d54..d14da9c54c 100644
--- a/lib/manager/terraform/lockfile/hash.spec.ts
+++ b/lib/manager/terraform/lockfile/hash.spec.ts
@@ -1,12 +1,7 @@
 import { createReadStream } from 'fs';
 import { DirectoryResult, dir } from 'tmp-promise';
 import * as httpMock from '../../../../test/http-mock';
-import {
-  getFixturePath,
-  getName,
-  loadFixture,
-  logger,
-} from '../../../../test/util';
+import { getFixturePath, loadFixture, logger } from '../../../../test/util';
 import { setGlobalConfig } from '../../../config/global';
 import { TerraformProviderDatasource } from '../../../datasource/terraform-provider';
 import { Logger } from '../../../logger/types';
@@ -17,7 +12,7 @@ const releaseBackendAzurerm = loadFixture('releaseBackendAzurerm_2_56_0.json');
 
 const log = logger.logger as jest.Mocked<Logger>;
 
-describe(getName(), () => {
+describe('manager/terraform/lockfile/hash', () => {
   let cacheDir: DirectoryResult;
 
   beforeEach(async () => {
diff --git a/lib/manager/terraform/lockfile/index.spec.ts b/lib/manager/terraform/lockfile/index.spec.ts
index 2b496169f6..091fe80984 100644
--- a/lib/manager/terraform/lockfile/index.spec.ts
+++ b/lib/manager/terraform/lockfile/index.spec.ts
@@ -1,5 +1,5 @@
 import { join } from 'upath';
-import { fs, getName, loadFixture, mocked } from '../../../../test/util';
+import { fs, loadFixture, mocked } from '../../../../test/util';
 import { setGlobalConfig } from '../../../config/global';
 import { getPkgReleases } from '../../../datasource';
 import type { UpdateArtifactsConfig } from '../../types';
@@ -28,7 +28,7 @@ const mockGetPkgReleases = getPkgReleases as jest.MockedFunction<
   typeof getPkgReleases
 >;
 
-describe(getName(), () => {
+describe('manager/terraform/lockfile/index', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     jest.resetModules();
diff --git a/lib/manager/terraform/lockfile/util.spec.ts b/lib/manager/terraform/lockfile/util.spec.ts
index 77e60d7f19..9a86e2255a 100644
--- a/lib/manager/terraform/lockfile/util.spec.ts
+++ b/lib/manager/terraform/lockfile/util.spec.ts
@@ -1,9 +1,9 @@
-import { getName, loadFixture } from '../../../../test/util';
+import { loadFixture } from '../../../../test/util';
 import { extractLocks } from './util';
 
 const validLockfile = loadFixture('validLockfile.hcl');
 
-describe(getName(), () => {
+describe('manager/terraform/lockfile/util', () => {
   describe('extractLocks()', () => {
     it('returns null for empty', () => {
       const result = extractLocks('nothing here');
diff --git a/lib/manager/terraform/modules.spec.ts b/lib/manager/terraform/modules.spec.ts
index fe85fdaedd..f7c1674e5a 100644
--- a/lib/manager/terraform/modules.spec.ts
+++ b/lib/manager/terraform/modules.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { gitTagsRefMatchRegex, githubRefMatchRegex } from './modules';
 
-describe(getName(), () => {
+describe('manager/terraform/modules', () => {
   describe('githubRefMatchRegex', () => {
     it('should split project and tag from source', () => {
       const { project, tag } = githubRefMatchRegex.exec(
diff --git a/lib/manager/terraform/util.spec.ts b/lib/manager/terraform/util.spec.ts
index 367cb4ad1a..3de5ec172e 100644
--- a/lib/manager/terraform/util.spec.ts
+++ b/lib/manager/terraform/util.spec.ts
@@ -1,8 +1,7 @@
-import { getName } from '../../../test/util';
 import { TerraformDependencyTypes } from './common';
 import { getTerraformDependencyType } from './util';
 
-describe(getName(), () => {
+describe('manager/terraform/util', () => {
   describe('getTerraformDependencyType()', () => {
     it('returns TerraformDependencyTypes.module', () => {
       expect(getTerraformDependencyType('module')).toBe(
diff --git a/lib/manager/terragrunt-version/extract.spec.ts b/lib/manager/terragrunt-version/extract.spec.ts
index 8530ef3b0b..ee1e62e8ac 100644
--- a/lib/manager/terragrunt-version/extract.spec.ts
+++ b/lib/manager/terragrunt-version/extract.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-describe(getName(), () => {
+describe('manager/terragrunt-version/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns a result', () => {
       const res = extractPackageFile('12.0.0\n');
diff --git a/lib/manager/terragrunt/extract.spec.ts b/lib/manager/terragrunt/extract.spec.ts
index e12406d66f..a903c2770f 100644
--- a/lib/manager/terragrunt/extract.spec.ts
+++ b/lib/manager/terragrunt/extract.spec.ts
@@ -1,4 +1,4 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const tg1 = loadFixture('2.hcl');
@@ -7,7 +7,7 @@ const tg2 = `terragrunt {
 }
 `;
 
-describe(getName(), () => {
+describe('manager/terragrunt/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns null for empty', () => {
       expect(extractPackageFile('nothing here')).toBeNull();
diff --git a/lib/manager/terragrunt/modules.spec.ts b/lib/manager/terragrunt/modules.spec.ts
index fe85fdaedd..283d1b150d 100644
--- a/lib/manager/terragrunt/modules.spec.ts
+++ b/lib/manager/terragrunt/modules.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { gitTagsRefMatchRegex, githubRefMatchRegex } from './modules';
 
-describe(getName(), () => {
+describe('manager/terragrunt/modules', () => {
   describe('githubRefMatchRegex', () => {
     it('should split project and tag from source', () => {
       const { project, tag } = githubRefMatchRegex.exec(
diff --git a/lib/manager/terragrunt/util.spec.ts b/lib/manager/terragrunt/util.spec.ts
index 26e12fe03d..e911532f4e 100644
--- a/lib/manager/terragrunt/util.spec.ts
+++ b/lib/manager/terragrunt/util.spec.ts
@@ -1,8 +1,7 @@
-import { getName } from '../../../test/util';
 import { TerragruntDependencyTypes } from './common';
 import { getTerragruntDependencyType } from './util';
 
-describe(getName(), () => {
+describe('manager/terragrunt/util', () => {
   describe('getTerragruntDependencyType()', () => {
     it('returns TerragruntDependencyTypes.terragrunt', () => {
       expect(getTerragruntDependencyType('terraform')).toBe(
diff --git a/lib/manager/travis/extract.spec.ts b/lib/manager/travis/extract.spec.ts
index 0bc26798dd..abeb3a98e4 100644
--- a/lib/manager/travis/extract.spec.ts
+++ b/lib/manager/travis/extract.spec.ts
@@ -1,9 +1,9 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
 const invalidYAML = loadFixture('invalid.yml');
 
-describe(getName(), () => {
+describe('manager/travis/extract', () => {
   describe('extractPackageFile()', () => {
     it('returns empty if fails to parse', () => {
       const res = extractPackageFile('blahhhhh:foo:@what\n');
diff --git a/lib/platform/azure/azure-got-wrapper.spec.ts b/lib/platform/azure/azure-got-wrapper.spec.ts
index 1c8800bb80..6ac00d978a 100644
--- a/lib/platform/azure/azure-got-wrapper.spec.ts
+++ b/lib/platform/azure/azure-got-wrapper.spec.ts
@@ -1,8 +1,7 @@
-import { getName } from '../../../test/util';
 import { PLATFORM_TYPE_AZURE } from '../../constants/platforms';
 import * as _hostRules from '../../util/host-rules';
 
-describe(getName(), () => {
+describe('platform/azure/azure-got-wrapper', () => {
   let azure: typeof import('./azure-got-wrapper');
   let hostRules: typeof _hostRules;
   beforeEach(() => {
diff --git a/lib/platform/azure/azure-helper.spec.ts b/lib/platform/azure/azure-helper.spec.ts
index 3fd0d9ab0c..1476ccfa8f 100644
--- a/lib/platform/azure/azure-helper.spec.ts
+++ b/lib/platform/azure/azure-helper.spec.ts
@@ -1,8 +1,7 @@
 import { Readable } from 'stream';
 import { GitPullRequestMergeStrategy } from 'azure-devops-node-api/interfaces/GitInterfaces';
-import { getName } from '../../../test/util';
 
-describe(getName(), () => {
+describe('platform/azure/azure-helper', () => {
   let azureHelper: typeof import('./azure-helper');
   let azureApi: jest.Mocked<typeof import('./azure-got-wrapper')>;
 
diff --git a/lib/platform/azure/index.spec.ts b/lib/platform/azure/index.spec.ts
index 76ba7745d9..90e2361480 100644
--- a/lib/platform/azure/index.spec.ts
+++ b/lib/platform/azure/index.spec.ts
@@ -5,7 +5,6 @@ import {
   GitStatusState,
   PullRequestStatus,
 } from 'azure-devops-node-api/interfaces/GitInterfaces';
-import { getName } from '../../../test/util';
 import { logger as _logger } from '../../logger';
 import { BranchStatus, PrState } from '../../types';
 import * as _git from '../../util/git';
@@ -13,7 +12,7 @@ import * as _hostRules from '../../util/host-rules';
 import type { Platform, RepoParams } from '../types';
 import { AzurePrVote } from './types';
 
-describe(getName(), () => {
+describe('platform/azure/index', () => {
   let hostRules: jest.Mocked<typeof _hostRules>;
   let azure: Platform;
   let azureApi: jest.Mocked<typeof import('./azure-got-wrapper')>;
diff --git a/lib/platform/azure/util.spec.ts b/lib/platform/azure/util.spec.ts
index f6b6edec81..bb967ee5d9 100644
--- a/lib/platform/azure/util.spec.ts
+++ b/lib/platform/azure/util.spec.ts
@@ -1,5 +1,4 @@
 import { Readable } from 'stream';
-import { getName } from '../../../test/util';
 import {
   getBranchNameWithoutRefsheadsPrefix,
   getGitStatusContextCombinedName,
@@ -13,7 +12,7 @@ import {
   streamToString,
 } from './util';
 
-describe(getName(), () => {
+describe('platform/azure/util', () => {
   describe('getNewBranchName', () => {
     it('should add refs/heads', () => {
       const res = getNewBranchName('testBB');
diff --git a/lib/platform/bitbucket-server/index.spec.ts b/lib/platform/bitbucket-server/index.spec.ts
index 2d39843c40..1002b9aafa 100644
--- a/lib/platform/bitbucket-server/index.spec.ts
+++ b/lib/platform/bitbucket-server/index.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import {
   REPOSITORY_CHANGED,
   REPOSITORY_EMPTY,
@@ -168,7 +167,7 @@ const scenarios = {
   'endpoint with path': new URL('https://stash.renovatebot.com/vcs'),
 };
 
-describe(getName(), () => {
+describe('platform/bitbucket-server/index', () => {
   Object.entries(scenarios).forEach(([scenarioName, url]) => {
     const urlHost = url.origin;
     const urlPath = url.pathname === '/' ? '' : url.pathname;
diff --git a/lib/platform/bitbucket/__snapshots__/utils.spec.ts.snap b/lib/platform/bitbucket/__snapshots__/utils.spec.ts.snap
index e26ef15d9c..9e35a709e4 100644
--- a/lib/platform/bitbucket/__snapshots__/utils.spec.ts.snap
+++ b/lib/platform/bitbucket/__snapshots__/utils.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`accumulateValues() paginates 1`] = `
+exports[`platform/bitbucket/utils paginates 1`] = `
 Array [
   Object {
     "headers": Object {
diff --git a/lib/platform/bitbucket/comments.spec.ts b/lib/platform/bitbucket/comments.spec.ts
index aebc255bb7..8b2b5f60c3 100644
--- a/lib/platform/bitbucket/comments.spec.ts
+++ b/lib/platform/bitbucket/comments.spec.ts
@@ -1,11 +1,10 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { setBaseUrl } from '../../util/http/bitbucket';
 import * as comments from './comments';
 
 const baseUrl = 'https://api.bitbucket.org';
 
-describe(getName(), () => {
+describe('platform/bitbucket/comments', () => {
   const config: comments.CommentsConfig = { repository: 'some/repo' };
 
   beforeEach(() => {
diff --git a/lib/platform/bitbucket/index.spec.ts b/lib/platform/bitbucket/index.spec.ts
index 993a936f9f..2711cf3cc7 100644
--- a/lib/platform/bitbucket/index.spec.ts
+++ b/lib/platform/bitbucket/index.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { logger as _logger } from '../../logger';
 import { BranchStatus, PrState } from '../../types';
 import * as _git from '../../util/git';
@@ -34,7 +33,7 @@ lxml==3.6.0
 mccabe==0.6.1
 `;
 
-describe(getName(), () => {
+describe('platform/bitbucket/index', () => {
   let bitbucket: Platform;
   let hostRules: jest.Mocked<typeof import('../../util/host-rules')>;
   let git: jest.Mocked<typeof _git>;
diff --git a/lib/platform/bitbucket/utils.spec.ts b/lib/platform/bitbucket/utils.spec.ts
index 39da0c4061..a110fcc34e 100644
--- a/lib/platform/bitbucket/utils.spec.ts
+++ b/lib/platform/bitbucket/utils.spec.ts
@@ -6,7 +6,7 @@ const range = (count: number) => [...Array(count).keys()];
 
 const baseUrl = 'https://api.bitbucket.org';
 
-describe('accumulateValues()', () => {
+describe('platform/bitbucket/utils', () => {
   beforeEach(() => {
     setBaseUrl(baseUrl);
   });
diff --git a/lib/platform/gitea/gitea-helper.spec.ts b/lib/platform/gitea/gitea-helper.spec.ts
index 4d1ea8a3e9..9011dd0a6d 100644
--- a/lib/platform/gitea/gitea-helper.spec.ts
+++ b/lib/platform/gitea/gitea-helper.spec.ts
@@ -1,10 +1,9 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { PrState } from '../../types';
 import { setBaseUrl } from '../../util/http/gitea';
 import * as ght from './gitea-helper';
 
-describe(getName(), () => {
+describe('platform/gitea/gitea-helper', () => {
   const baseUrl = 'https://gitea.renovatebot.com/api/v1';
 
   const mockCommitHash = '0d9c7726c3d628b7e28af234595cfd20febdbf8e';
diff --git a/lib/platform/gitea/index.spec.ts b/lib/platform/gitea/index.spec.ts
index 058aed3ef8..2c41ac96a9 100644
--- a/lib/platform/gitea/index.spec.ts
+++ b/lib/platform/gitea/index.spec.ts
@@ -5,7 +5,7 @@ import {
   RepoParams,
   RepoResult,
 } from '..';
-import { getName, partial } from '../../../test/util';
+import { partial } from '../../../test/util';
 import {
   REPOSITORY_ACCESS_FORBIDDEN,
   REPOSITORY_ARCHIVED,
@@ -26,7 +26,7 @@ import * as ght from './gitea-helper';
  */
 const GITEA_VERSION = '1.14.0+dev-754-g5d2b7ba63';
 
-describe(getName(), () => {
+describe('platform/gitea/index', () => {
   let gitea: Platform;
   let helper: jest.Mocked<typeof import('./gitea-helper')>;
   let logger: jest.Mocked<typeof _logger>;
diff --git a/lib/platform/github/index.spec.ts b/lib/platform/github/index.spec.ts
index ab4fdc442e..99a5463b1a 100644
--- a/lib/platform/github/index.spec.ts
+++ b/lib/platform/github/index.spec.ts
@@ -1,6 +1,6 @@
 import { DateTime } from 'luxon';
 import * as httpMock from '../../../test/http-mock';
-import { getName, loadFixture, mocked } from '../../../test/util';
+import { loadFixture, mocked } from '../../../test/util';
 import {
   REPOSITORY_NOT_FOUND,
   REPOSITORY_RENAMED,
@@ -11,7 +11,7 @@ import type { Platform } from '../types';
 
 const githubApiHost = 'https://api.github.com';
 
-describe(getName(), () => {
+describe('platform/github/index', () => {
   let github: Platform;
   let hostRules: jest.Mocked<typeof import('../../util/host-rules')>;
   let git: jest.Mocked<typeof _git>;
diff --git a/lib/platform/github/massage-markdown-links.spec.ts b/lib/platform/github/massage-markdown-links.spec.ts
index 536ea879d0..0fd3b5023c 100644
--- a/lib/platform/github/massage-markdown-links.spec.ts
+++ b/lib/platform/github/massage-markdown-links.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { massageMarkdownLinks } from './massage-markdown-links';
 
-describe(getName(), () => {
+describe('platform/github/massage-markdown-links', () => {
   it('performs multiple replacements', () => {
     const input = [
       'Link [foo/bar#1](https://github.com/foo/bar/pull/1) points to https://github.com/foo/bar/pull/1.',
diff --git a/lib/platform/gitlab/index.spec.ts b/lib/platform/gitlab/index.spec.ts
index 4cbe3169ce..66fc051eca 100644
--- a/lib/platform/gitlab/index.spec.ts
+++ b/lib/platform/gitlab/index.spec.ts
@@ -1,7 +1,6 @@
 // TODO fix mocks
 import { Platform, RepoParams } from '..';
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import {
   REPOSITORY_ARCHIVED,
   REPOSITORY_CHANGED,
@@ -16,7 +15,7 @@ import * as _hostRules from '../../util/host-rules';
 
 const gitlabApiHost = 'https://gitlab.com';
 
-describe(getName(), () => {
+describe('platform/gitlab/index', () => {
   let gitlab: Platform;
   let hostRules: jest.Mocked<typeof _hostRules>;
   let git: jest.Mocked<typeof _git>;
diff --git a/lib/platform/index.spec.ts b/lib/platform/index.spec.ts
index bcd5ff9c74..54fd78d40a 100644
--- a/lib/platform/index.spec.ts
+++ b/lib/platform/index.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../test/http-mock';
-import { getName } from '../../test/util';
 import { PLATFORM_NOT_FOUND } from '../constants/error-messages';
 import { PLATFORM_TYPE_BITBUCKET } from '../constants/platforms';
 import { loadModules } from '../util/modules';
@@ -8,7 +7,7 @@ import * as platform from '.';
 
 jest.unmock('.');
 
-describe(getName(), () => {
+describe('platform/index', () => {
   beforeEach(() => {
     jest.resetModules();
   });
diff --git a/lib/platform/utils/pr-body.spec.ts b/lib/platform/utils/pr-body.spec.ts
index 53335f4757..710a4ceda6 100644
--- a/lib/platform/utils/pr-body.spec.ts
+++ b/lib/platform/utils/pr-body.spec.ts
@@ -1,9 +1,9 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { smartTruncate } from './pr-body';
 
 const prBody = loadFixture('pr-body.txt');
 
-describe(getName(), () => {
+describe('platform/utils/pr-body', () => {
   describe('.smartTruncate', () => {
     it('truncates to 1000', () => {
       const body = smartTruncate(prBody, 1000);
diff --git a/lib/platform/utils/read-only-issue-body.spec.ts b/lib/platform/utils/read-only-issue-body.spec.ts
index 48e6b4ac37..84d7456938 100644
--- a/lib/platform/utils/read-only-issue-body.spec.ts
+++ b/lib/platform/utils/read-only-issue-body.spec.ts
@@ -1,9 +1,9 @@
-import { getName, loadFixture } from '../../../test/util';
+import { loadFixture } from '../../../test/util';
 import { readOnlyIssueBody } from './read-only-issue-body';
 
 const issueBody = loadFixture('issue-body.txt');
 
-describe(getName(), () => {
+describe('platform/utils/read-only-issue-body', () => {
   describe('.readOnlyIssueBody', () => {
     it('removes all checkbox formatting', () => {
       expect(readOnlyIssueBody(issueBody)).toEqual(
diff --git a/lib/util/__snapshots__/package-rules.spec.ts.snap b/lib/util/__snapshots__/package-rules.spec.ts.snap
index a4b5d02164..3220cf2227 100644
--- a/lib/util/__snapshots__/package-rules.spec.ts.snap
+++ b/lib/util/__snapshots__/package-rules.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`applyPackageRules() applies 1`] = `
+exports[`util/package-rules applies 1`] = `
 Object {
   "currentValue": "1.0.0",
   "depName": "a",
@@ -49,7 +49,7 @@ Object {
 }
 `;
 
-exports[`applyPackageRules() empty rules 1`] = `
+exports[`util/package-rules empty rules 1`] = `
 Object {
   "foo": "bar",
   "packageRules": null,
diff --git a/lib/util/cache/memory/index.spec.ts b/lib/util/cache/memory/index.spec.ts
index 9272efecdd..6d4fcdb2fd 100644
--- a/lib/util/cache/memory/index.spec.ts
+++ b/lib/util/cache/memory/index.spec.ts
@@ -1,6 +1,6 @@
 import * as memCache from '.';
 
-describe('getRepoCache', () => {
+describe('util/cache/memory/index', () => {
   it('returns undefined if not init', () => {
     expect(memCache.get('key1')).toBeUndefined();
   });
diff --git a/lib/util/cache/package/decorator.spec.ts b/lib/util/cache/package/decorator.spec.ts
index dfc6b1bb6f..5921bc3465 100644
--- a/lib/util/cache/package/decorator.spec.ts
+++ b/lib/util/cache/package/decorator.spec.ts
@@ -1,6 +1,5 @@
 import os from 'os';
 import { mock } from 'jest-mock-extended';
-import { getName } from '../../../../test/util';
 import type { GetReleasesConfig } from '../../../datasource';
 import * as memCache from '../memory';
 import { cache } from './decorator';
@@ -8,7 +7,7 @@ import * as packageCache from '.';
 
 jest.mock('./file');
 
-describe(getName(), () => {
+describe('util/cache/package/decorator', () => {
   const spy = jest.fn(() => Promise.resolve());
 
   beforeAll(() => {
diff --git a/lib/util/cache/package/file.spec.ts b/lib/util/cache/package/file.spec.ts
index 8587885822..159283398a 100644
--- a/lib/util/cache/package/file.spec.ts
+++ b/lib/util/cache/package/file.spec.ts
@@ -1,8 +1,7 @@
 import os from 'os';
-import { getName } from '../../../../test/util';
 import { get, init, set } from './file';
 
-describe(getName(), () => {
+describe('util/cache/package/file', () => {
   it('returns if uninitiated', async () => {
     await set('test', 'key', 1234);
     expect(await get('test', 'key')).toBeUndefined();
diff --git a/lib/util/cache/package/index.spec.ts b/lib/util/cache/package/index.spec.ts
index 63f6e32a89..cd419e644e 100644
--- a/lib/util/cache/package/index.spec.ts
+++ b/lib/util/cache/package/index.spec.ts
@@ -1,10 +1,9 @@
-import { getName } from '../../../../test/util';
 import { cleanup, get, init, set } from '.';
 
 jest.mock('./file');
 jest.mock('./redis');
 
-describe(getName(), () => {
+describe('util/cache/package/index', () => {
   it('returns undefined if not initialized', async () => {
     expect(await get('test', 'missing-key')).toBeUndefined();
     expect(await set('test', 'some-key', 'some-value', 5)).toBeUndefined();
diff --git a/lib/util/cache/repository/index.spec.ts b/lib/util/cache/repository/index.spec.ts
index 85f5251c3b..2fe02ba3cd 100644
--- a/lib/util/cache/repository/index.spec.ts
+++ b/lib/util/cache/repository/index.spec.ts
@@ -1,5 +1,5 @@
 import * as _fs from 'fs-extra';
-import { getName, mocked } from '../../../../test/util';
+import { mocked } from '../../../../test/util';
 import { setGlobalConfig } from '../../../config/global';
 import * as repositoryCache from '.';
 
@@ -7,7 +7,7 @@ jest.mock('fs-extra');
 
 const fs = mocked(_fs);
 
-describe(getName(), () => {
+describe('util/cache/repository/index', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     setGlobalConfig({ cacheDir: '/tmp/renovate/cache/' });
diff --git a/lib/util/emoji.spec.ts b/lib/util/emoji.spec.ts
index 5c7083d7b2..969563e339 100644
--- a/lib/util/emoji.spec.ts
+++ b/lib/util/emoji.spec.ts
@@ -1,8 +1,7 @@
 import { fromCodepointToUnicode, fromHexcodeToCodepoint } from 'emojibase';
-import { getName } from '../../test/util';
 import { emojify, setEmojiConfig, stripEmojis, unemojify } from './emoji';
 
-describe(getName(), () => {
+describe('util/emoji', () => {
   beforeEach(() => {
     setEmojiConfig({ unicodeEmoji: true });
   });
diff --git a/lib/util/exec/docker/index.spec.ts b/lib/util/exec/docker/index.spec.ts
index bf5c746a3d..5c8f35b1f0 100644
--- a/lib/util/exec/docker/index.spec.ts
+++ b/lib/util/exec/docker/index.spec.ts
@@ -3,7 +3,6 @@ import {
   mockExecAll,
   mockExecSequence,
 } from '../../../../test/exec-util';
-import { getName } from '../../../../test/util';
 import { setGlobalConfig } from '../../../config/global';
 import { SYSTEM_INSUFFICIENT_MEMORY } from '../../../constants/error-messages';
 import { getPkgReleases as _getPkgReleases } from '../../../datasource';
@@ -24,7 +23,7 @@ const getPkgReleases: jest.Mock<typeof _getPkgReleases> =
   _getPkgReleases as any;
 jest.mock('../../../datasource');
 
-describe(getName(), () => {
+describe('util/exec/docker/index', () => {
   beforeEach(() => {
     jest.resetAllMocks();
   });
diff --git a/lib/util/exec/env.spec.ts b/lib/util/exec/env.spec.ts
index 65379476ae..d6a4d09bf5 100644
--- a/lib/util/exec/env.spec.ts
+++ b/lib/util/exec/env.spec.ts
@@ -1,7 +1,7 @@
 import { setGlobalConfig } from '../../config/global';
 import { getChildProcessEnv } from './env';
 
-describe('getChildProcess environment when trustlevel set to low', () => {
+describe('util/exec/env', () => {
   const envVars = [
     'HTTP_PROXY',
     'HTTPS_PROXY',
diff --git a/lib/util/exec/index.spec.ts b/lib/util/exec/index.spec.ts
index 596ca3606c..f1aee6700d 100644
--- a/lib/util/exec/index.spec.ts
+++ b/lib/util/exec/index.spec.ts
@@ -4,7 +4,6 @@ import {
   exec as _cpExec,
 } from 'child_process';
 import { envMock } from '../../../test/exec-util';
-import { getName } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import { TEMPORARY_ERROR } from '../../constants/error-messages';
@@ -25,7 +24,7 @@ interface TestInput {
   adminConfig?: Partial<RepoGlobalConfig>;
 }
 
-describe(getName(), () => {
+describe('util/exec/index', () => {
   let processEnvOrig: NodeJS.ProcessEnv;
 
   const cacheDir = '/tmp/renovate/cache/';
diff --git a/lib/util/fs/index.spec.ts b/lib/util/fs/index.spec.ts
index 30f4da7130..2add18ff78 100644
--- a/lib/util/fs/index.spec.ts
+++ b/lib/util/fs/index.spec.ts
@@ -1,7 +1,7 @@
 import { withDir } from 'tmp-promise';
 import { join } from 'upath';
 import { envMock } from '../../../test/exec-util';
-import { getName, mocked } from '../../../test/util';
+import { mocked } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import * as _env from '../exec/env';
 import {
@@ -19,7 +19,7 @@ import {
 jest.mock('../../util/exec/env');
 const env = mocked(_env);
 
-describe(getName(), () => {
+describe('util/fs/index', () => {
   describe('readLocalFile', () => {
     beforeEach(() => {
       setGlobalConfig({ localDir: '' });
@@ -37,9 +37,7 @@ describe(getName(), () => {
       expect(await readLocalFile(__dirname)).toBeNull();
     });
   });
-});
 
-describe(getName(), () => {
   describe('localPathExists', () => {
     it('returns true for file', async () => {
       expect(await localPathExists(__filename)).toBe(true);
@@ -53,9 +51,7 @@ describe(getName(), () => {
       );
     });
   });
-});
 
-describe(getName(), () => {
   describe('findLocalSiblingOrParent', () => {
     it('returns path for file', async () => {
       await withDir(
diff --git a/lib/util/fs/proxies.spec.ts b/lib/util/fs/proxies.spec.ts
index 1d04cced94..c2d057e93c 100644
--- a/lib/util/fs/proxies.spec.ts
+++ b/lib/util/fs/proxies.spec.ts
@@ -1,10 +1,9 @@
 import * as fs from 'fs-extra';
-import { getName } from '../../../test/util';
 import { remove } from './proxies';
 
 jest.mock('fs-extra');
 
-describe(getName(), () => {
+describe('util/fs/proxies', () => {
   describe('remove', () => {
     it('should call remove in fs-extra', async () => {
       (fs.remove as jest.Mock).mockResolvedValue(undefined);
diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts
index 32a009763d..c9232b60f5 100644
--- a/lib/util/git/index.spec.ts
+++ b/lib/util/git/index.spec.ts
@@ -2,12 +2,11 @@ import fs from 'fs-extra';
 import Git from 'simple-git';
 import SimpleGit from 'simple-git/src/git';
 import tmp from 'tmp-promise';
-import { getName } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import * as git from '.';
 import { GitNoVerifyOption, setNoVerify } from '.';
 
-describe(getName(), () => {
+describe('util/git/index', () => {
   jest.setTimeout(15000);
 
   const masterCommitDate = new Date();
diff --git a/lib/util/git/private-key.spec.ts b/lib/util/git/private-key.spec.ts
index 964c80271f..8349f573fd 100644
--- a/lib/util/git/private-key.spec.ts
+++ b/lib/util/git/private-key.spec.ts
@@ -1,4 +1,4 @@
-import { getName, mocked } from '../../../test/util';
+import { mocked } from '../../../test/util';
 import * as exec_ from '../exec';
 import {
   configSigningKey,
@@ -11,7 +11,7 @@ jest.mock('../exec');
 
 const exec = mocked(exec_);
 
-describe(getName(), () => {
+describe('util/git/private-key', () => {
   describe('writePrivateKey()', () => {
     it('returns if no private key', async () => {
       await expect(writePrivateKey()).resolves.not.toThrow();
diff --git a/lib/util/git/url.spec.ts b/lib/util/git/url.spec.ts
index bc8dc6e855..eceb04c32c 100644
--- a/lib/util/git/url.spec.ts
+++ b/lib/util/git/url.spec.ts
@@ -1,9 +1,9 @@
-import { getName, hostRules } from '../../../test/util';
+import { hostRules } from '../../../test/util';
 import { getHttpUrl, getRemoteUrlWithToken } from './url';
 
 jest.mock('../host-rules');
 
-describe(getName(), () => {
+describe('util/git/url', () => {
   describe('getHttpUrl()', () => {
     it('returns https url for git url', () => {
       expect(getHttpUrl('git://foo.bar/')).toBe('https://foo.bar/');
diff --git a/lib/util/host-rules.spec.ts b/lib/util/host-rules.spec.ts
index 04d6060f08..145bc91937 100644
--- a/lib/util/host-rules.spec.ts
+++ b/lib/util/host-rules.spec.ts
@@ -1,9 +1,8 @@
-import { getName } from '../../test/util';
 import { PLATFORM_TYPE_AZURE } from '../constants/platforms';
 import * as datasourceNuget from '../datasource/nuget';
 import { add, clear, find, findAll, hosts } from './host-rules';
 
-describe(getName(), () => {
+describe('util/host-rules', () => {
   beforeEach(() => {
     clear();
   });
diff --git a/lib/util/html.spec.ts b/lib/util/html.spec.ts
index 7509826c3f..c4727d8234 100644
--- a/lib/util/html.spec.ts
+++ b/lib/util/html.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../test/util';
 import { HTMLElement, parse } from './html';
 
-describe(getName(), () => {
+describe('util/html', () => {
   it('parses HTML', () => {
     const body = parse('<div>Hello, world!</div>');
     expect(body.childNodes).toHaveLength(1);
diff --git a/lib/util/http/auth.spec.ts b/lib/util/http/auth.spec.ts
index bae9ce80bd..11d5c9d877 100644
--- a/lib/util/http/auth.spec.ts
+++ b/lib/util/http/auth.spec.ts
@@ -1,5 +1,5 @@
 import { NormalizedOptions } from 'got';
-import { getName, partial } from '../../../test/util';
+import { partial } from '../../../test/util';
 import {
   PLATFORM_TYPE_GITEA,
   PLATFORM_TYPE_GITLAB,
@@ -7,7 +7,7 @@ import {
 import { applyAuthorization, removeAuthorization } from './auth';
 import { GotOptions } from './types';
 
-describe(getName(), () => {
+describe('util/http/auth', () => {
   describe('applyAuthorization', () => {
     it('does nothing', () => {
       const opts: GotOptions = {
diff --git a/lib/util/http/bitbucket-server.spec.ts b/lib/util/http/bitbucket-server.spec.ts
index 149f6fe182..65cf77d7d6 100644
--- a/lib/util/http/bitbucket-server.spec.ts
+++ b/lib/util/http/bitbucket-server.spec.ts
@@ -1,12 +1,11 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { PLATFORM_TYPE_BITBUCKET_SERVER } from '../../constants/platforms';
 import * as hostRules from '../host-rules';
 import { BitbucketServerHttp, setBaseUrl } from './bitbucket-server';
 
 const baseUrl = 'https://git.example.com';
 
-describe(getName(), () => {
+describe('util/http/bitbucket-server', () => {
   let api: BitbucketServerHttp;
   beforeEach(() => {
     api = new BitbucketServerHttp();
diff --git a/lib/util/http/bitbucket.spec.ts b/lib/util/http/bitbucket.spec.ts
index 17fe677e9b..ace4b8a50c 100644
--- a/lib/util/http/bitbucket.spec.ts
+++ b/lib/util/http/bitbucket.spec.ts
@@ -1,12 +1,11 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { PLATFORM_TYPE_BITBUCKET } from '../../constants/platforms';
 import * as hostRules from '../host-rules';
 import { BitbucketHttp, setBaseUrl } from './bitbucket';
 
 const baseUrl = 'https://api.bitbucket.org';
 
-describe(getName(), () => {
+describe('util/http/bitbucket', () => {
   let api: BitbucketHttp;
   beforeEach(() => {
     api = new BitbucketHttp();
diff --git a/lib/util/http/gitea.spec.ts b/lib/util/http/gitea.spec.ts
index b3043b9bc1..3d1645181b 100644
--- a/lib/util/http/gitea.spec.ts
+++ b/lib/util/http/gitea.spec.ts
@@ -1,8 +1,7 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { GiteaHttp, setBaseUrl } from './gitea';
 
-describe(getName(), () => {
+describe('util/http/gitea', () => {
   const baseUrl = 'https://gitea.renovatebot.com/api/v1';
 
   let giteaHttp: GiteaHttp;
diff --git a/lib/util/http/github.spec.ts b/lib/util/http/github.spec.ts
index c5bd6b6e26..53111f6cc2 100644
--- a/lib/util/http/github.spec.ts
+++ b/lib/util/http/github.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import {
   EXTERNAL_HOST_ERROR,
   PLATFORM_BAD_CREDENTIALS,
@@ -38,7 +37,7 @@ query(
 }
 `;
 
-describe(getName(), () => {
+describe('util/http/github', () => {
   let githubApi: GithubHttp;
   beforeEach(() => {
     githubApi = new GithubHttp();
diff --git a/lib/util/http/gitlab.spec.ts b/lib/util/http/gitlab.spec.ts
index fff760d17d..acd7c6d989 100644
--- a/lib/util/http/gitlab.spec.ts
+++ b/lib/util/http/gitlab.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
 import { PLATFORM_TYPE_GITLAB } from '../../constants/platforms';
 import * as hostRules from '../host-rules';
@@ -13,7 +12,7 @@ hostRules.add({
 const gitlabApiHost = 'https://gitlab.com';
 const selfHostedUrl = 'http://mycompany.com/gitlab';
 
-describe(getName(), () => {
+describe('util/http/gitlab', () => {
   let gitlabApi: GitlabHttp;
 
   beforeEach(() => {
diff --git a/lib/util/http/host-rules.spec.ts b/lib/util/http/host-rules.spec.ts
index 46d584e6b8..ea59b0461f 100644
--- a/lib/util/http/host-rules.spec.ts
+++ b/lib/util/http/host-rules.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../../test/util';
 import {
   PLATFORM_TYPE_GITEA,
   PLATFORM_TYPE_GITHUB,
@@ -11,7 +10,7 @@ const url = 'https://github.com';
 
 jest.mock('global-agent');
 
-describe(getName(), () => {
+describe('util/http/host-rules', () => {
   const options = {
     hostType: PLATFORM_TYPE_GITHUB,
   };
diff --git a/lib/util/http/index.spec.ts b/lib/util/http/index.spec.ts
index 22df8fac65..d7c7531a46 100644
--- a/lib/util/http/index.spec.ts
+++ b/lib/util/http/index.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import {
   EXTERNAL_HOST_ERROR,
   HOST_DISABLED,
@@ -10,7 +9,7 @@ import { Http } from '.';
 
 const baseUrl = 'http://renovate.com';
 
-describe(getName(), () => {
+describe('util/http/index', () => {
   let http: Http;
 
   beforeEach(() => {
diff --git a/lib/util/http/queue.spec.ts b/lib/util/http/queue.spec.ts
index 585a7a29db..bda615afdf 100644
--- a/lib/util/http/queue.spec.ts
+++ b/lib/util/http/queue.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { getQueue } from './queue';
 
-describe(getName(), () => {
+describe('util/http/queue', () => {
   it('returns null for invalid URL', () => {
     expect(getQueue(null)).toBeNull();
   });
diff --git a/lib/util/index.spec.ts b/lib/util/index.spec.ts
index 7c4ae4f9ab..2f2e7e8584 100644
--- a/lib/util/index.spec.ts
+++ b/lib/util/index.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../test/util';
 import { sampleSize } from '.';
 
-describe(getName(), () => {
+describe('util/index', () => {
   describe('sampleSize', () => {
     const array = ['a', 'b', 'c', 'd'];
     it('returns correct sized array', () => {
diff --git a/lib/util/markdown.spec.ts b/lib/util/markdown.spec.ts
index 99bf435235..022a2535d2 100644
--- a/lib/util/markdown.spec.ts
+++ b/lib/util/markdown.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../test/util';
 import { linkify } from './markdown';
 
-describe(getName(), () => {
+describe('util/markdown', () => {
   describe('.linkify', () => {
     const md = `Some references:
 
diff --git a/lib/util/mask.spec.ts b/lib/util/mask.spec.ts
index c67ed2818e..7d0753ba96 100644
--- a/lib/util/mask.spec.ts
+++ b/lib/util/mask.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../test/util';
 import { maskToken } from './mask';
 
-describe(getName(), () => {
+describe('util/mask', () => {
   describe('.maskToken', () => {
     it('returns value if passed value is falsy', () => {
       expect(maskToken('')).toEqual('');
diff --git a/lib/util/merge-confidence/index.spec.ts b/lib/util/merge-confidence/index.spec.ts
index 99f6d009e0..6c636107f8 100644
--- a/lib/util/merge-confidence/index.spec.ts
+++ b/lib/util/merge-confidence/index.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../../test/http-mock';
-import { getName } from '../../../test/util';
 import * as memCache from '../cache/memory';
 import * as hostRules from '../host-rules';
 import {
@@ -8,7 +7,7 @@ import {
   satisfiesConfidenceLevel,
 } from '.';
 
-describe(getName(), () => {
+describe('util/merge-confidence/index', () => {
   describe('isActiveConfidenceLevel()', () => {
     it('returns false if null', () => {
       expect(isActiveConfidenceLevel(null)).toBe(false);
diff --git a/lib/util/object.spec.ts b/lib/util/object.spec.ts
index 129c2d3bcd..bfc925898e 100644
--- a/lib/util/object.spec.ts
+++ b/lib/util/object.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../test/util';
 import { hasKey } from './object';
 
-describe(getName(), () => {
+describe('util/object', () => {
   beforeEach(() => {
     jest.resetModules();
   });
diff --git a/lib/util/package-rules.spec.ts b/lib/util/package-rules.spec.ts
index f8421af282..fd074d61f4 100644
--- a/lib/util/package-rules.spec.ts
+++ b/lib/util/package-rules.spec.ts
@@ -16,7 +16,7 @@ type TestConfig = PackageRuleInputConfig & {
   groupName?: string;
 };
 
-describe('applyPackageRules()', () => {
+describe('util/package-rules', () => {
   const config1: TestConfig = {
     foo: 'bar',
 
diff --git a/lib/util/regex.spec.ts b/lib/util/regex.spec.ts
index d1f40fac2a..b0dad6a8b3 100644
--- a/lib/util/regex.spec.ts
+++ b/lib/util/regex.spec.ts
@@ -1,10 +1,9 @@
 // eslint-disable-next-line import/no-extraneous-dependencies
 import RE2 from 're2';
-import { getName } from '../../test/util';
 import { CONFIG_VALIDATION } from '../constants/error-messages';
 import { regEx } from './regex';
 
-describe(getName(), () => {
+describe('util/regex', () => {
   beforeEach(() => {
     jest.resetModules();
   });
diff --git a/lib/util/sanitize.spec.ts b/lib/util/sanitize.spec.ts
index a91c0a4751..db76bc89fb 100644
--- a/lib/util/sanitize.spec.ts
+++ b/lib/util/sanitize.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../test/util';
 import { add, clear, sanitize } from './sanitize';
 
-describe(getName(), () => {
+describe('util/sanitize', () => {
   beforeEach(() => {
     clear();
   });
diff --git a/lib/util/split.spec.ts b/lib/util/split.spec.ts
index 856cff8ad1..f1f6260bfc 100644
--- a/lib/util/split.spec.ts
+++ b/lib/util/split.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../test/util';
 import { addSplit, getSplits, splitInit } from './split';
 
-describe(getName(), () => {
+describe('util/split', () => {
   it('adds splits and returns results', () => {
     splitInit();
     addSplit('one');
diff --git a/lib/util/template/index.spec.ts b/lib/util/template/index.spec.ts
index a6788320ed..0df9844e69 100644
--- a/lib/util/template/index.spec.ts
+++ b/lib/util/template/index.spec.ts
@@ -1,8 +1,7 @@
-import { getName } from '../../../test/util';
 import { getOptions } from '../../config/options';
 import * as template from '.';
 
-describe(getName(), () => {
+describe('util/template/index', () => {
   it('has valid exposed config options', () => {
     const allOptions = getOptions().map((option) => option.name);
     const missingOptions = template.exposedConfigOptions.filter(
diff --git a/lib/util/url.spec.ts b/lib/util/url.spec.ts
index a3ed562d9a..c425ef9eb7 100644
--- a/lib/util/url.spec.ts
+++ b/lib/util/url.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../test/util';
 import {
   ensurePathPrefix,
   parseUrl,
@@ -7,7 +6,7 @@ import {
   validateUrl,
 } from './url';
 
-describe(getName(), () => {
+describe('util/url', () => {
   test.each([
     ['http://foo.io', '', 'http://foo.io'],
     ['http://foo.io/', '', 'http://foo.io'],
diff --git a/lib/versioning/__snapshots__/index.spec.ts.snap b/lib/versioning/__snapshots__/index.spec.ts.snap
index 98f8f8f874..475eeaec69 100644
--- a/lib/versioning/__snapshots__/index.spec.ts.snap
+++ b/lib/versioning/__snapshots__/index.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`allVersioning.get(versioning) has api 1`] = `
+exports[`versioning/index has api 1`] = `
 Array [
   "equals",
   "getMajor",
diff --git a/lib/versioning/composer/index.spec.ts b/lib/versioning/composer/index.spec.ts
index b8ec0e72ba..2c8683cf48 100644
--- a/lib/versioning/composer/index.spec.ts
+++ b/lib/versioning/composer/index.spec.ts
@@ -1,536 +1,538 @@
 import { api as semver } from '.';
 
-describe('semver.getPatch(input)', () => {
-  it('gets patch', () => {
-    expect(semver.getPatch('1.2.0')).toEqual(0);
-  });
-});
-describe('semver.equals(a, b)', () => {
-  it('should pad short version', () => {
-    expect(semver.equals('1.2.0', 'v1.2')).toBe(true);
-  });
-  it('should pad really short version', () => {
-    expect(semver.equals('v1.0.0', '1')).toBe(true);
-  });
-  it('should translate stability modifier', () => {
-    expect(semver.equals('1.0@alpha3', '1.0.0-alpha.3')).toBe(true);
-    expect(semver.equals('1.0@beta', '1.0.0-beta')).toBe(true);
-    expect(semver.equals('1.0@rc2', '1.0.0-rc.2')).toBe(true);
-  });
-});
-describe('semver.isGreaterThan(a, b)', () => {
-  it('should pad short version', () => {
-    expect(semver.isGreaterThan('1.2.0', 'v1.2')).toBe(false);
-  });
-  it('should pad really short version', () => {
-    expect(semver.isGreaterThan('v1.0.1', '1')).toBe(true);
-  });
-  it('should pad both versions', () => {
-    expect(semver.isGreaterThan('1', '1.1')).toBe(false);
-  });
-});
-describe('semver.isSingleVersion(input)', () => {
-  it('should pad short version', () => {
-    expect(semver.isSingleVersion('v1.2')).toBeTruthy();
-  });
-});
-describe('semver.isStable(input)', () => {
-  it('should pad short version', () => {
-    expect(semver.isStable('v1.2')).toBeTruthy();
-  });
-});
-describe('semver.isValid(input)', () => {
-  it('should support simple semver', () => {
-    expect(semver.isValid('1.2.3')).toBeTruthy();
-  });
-  it('should support semver with dash', () => {
-    expect(semver.isValid('1.2.3-foo')).toBeTruthy();
-  });
-  it('should reject semver without dash', () => {
-    expect(semver.isValid('1.2.3foo')).toBeFalsy();
-  });
-  it('should support ranges', () => {
-    expect(semver.isValid('~1.2.3')).toBeTruthy();
-    expect(semver.isValid('^1.2.3')).toBeTruthy();
-    expect(semver.isValid('>1.2.3')).toBeTruthy();
-  });
-  it('should support ranges with stability modifiers', () => {
-    expect(semver.isValid('~1.2.3-beta1')).toBeTruthy();
-    expect(semver.isValid('^1.2.3-alpha')).toBeTruthy();
-    expect(semver.isValid('>1.2.3-rc2')).toBeTruthy();
-  });
-  it('should support ranges with min-stability', () => {
-    expect(semver.isValid('~1.2.3@beta')).toBeTruthy();
-    expect(semver.isValid('^1.2.3@alpha')).toBeTruthy();
-    expect(semver.isValid('>1.2.3@rc')).toBeTruthy();
-  });
-});
-describe('semver.isVersion(input)', () => {
-  it('should support simple semver', () => {
-    expect(semver.isValid('1.2.3')).toBeTruthy();
-  });
-  it('should support shortened version', () => {
-    expect(semver.isValid('2.5')).toBeTruthy();
-  });
-  it('should support shortened v version', () => {
-    expect(semver.isValid('v2.5')).toBeTruthy();
-  });
-});
-describe('semver.isLessThanRange()', () => {
-  it('handles massaged tilde', () => {
-    expect(semver.isLessThanRange('0.3.1', '~0.4')).toBe(true);
-    expect(semver.isLessThanRange('0.5.1', '~0.4')).toBe(false);
-  });
-});
-describe('semver.getSatisfyingVersion()', () => {
-  it('handles massaged tilde', () => {
-    expect(
-      semver.getSatisfyingVersion(
-        ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
-        '~4'
-      )
-    ).toBe('4.2.0');
-    expect(
-      semver.getSatisfyingVersion(
-        ['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0'],
-        '~4'
-      )
-    ).toBe('4.2.0');
-    expect(
-      semver.getSatisfyingVersion(
-        ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
-        '~0.4'
-      )
-    ).toBe('0.5.0');
-  });
-  it('handles prereleases', () => {
-    expect(
-      semver.getSatisfyingVersion(
-        [
-          '0.4.0',
-          '0.5.0',
-          '4.0.0-beta1',
-          '4.0.0-beta2',
-          '4.2.0-beta1',
-          '4.2.0-beta2',
-          '5.0.0',
-        ],
-        '~4@beta'
-      )
-    ).toBe('4.0.0-beta2');
-  });
-});
-describe('semver.minSatisfyingVersion()', () => {
-  it('handles massaged tilde', () => {
-    expect(
-      semver.minSatisfyingVersion(
-        ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
-        '~4'
-      )
-    ).toBe('4.0.0');
-    expect(
-      semver.minSatisfyingVersion(
-        ['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0'],
-        '~4'
-      )
-    ).toBe('4.0.0');
-    expect(
-      semver.minSatisfyingVersion(
-        ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
-        '~0.4'
-      )
-    ).toBe('0.4.0');
-  });
-  it('handles prereleases', () => {
-    expect(
-      semver.minSatisfyingVersion(
-        [
-          '0.4.0',
-          '0.5.0',
-          '4.0.0-beta1',
-          '4.0.0',
-          '4.2.0-beta1',
-          '4.2.0-beta2',
-          '5.0.0',
-        ],
-        '~4@beta'
-      )
-    ).toBe('4.0.0-beta1');
-  });
-});
-describe('semver.matches()', () => {
-  it('handles massaged tilde', () => {
-    expect(semver.matches('0.3.1', '~0.4')).toBe(false);
-    expect(semver.matches('0.5.1', '~0.4')).toBe(true);
-  });
-});
-describe('semver.getNewValue()', () => {
-  it('returns pinned newVersion', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '~1.0',
-        rangeStrategy: 'pin',
-        currentVersion: '1.0',
-        newVersion: 'V1.1',
-      })
-    ).toEqual('V1.1');
-    expect(
-      semver.getNewValue({
-        currentValue: '^1.0',
-        rangeStrategy: 'pin',
-        currentVersion: '1.0',
-        newVersion: 'V1.1',
-      })
-    ).toEqual('V1.1');
-  });
-  it('returns newVersion', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: 'v1.0',
-        rangeStrategy: 'replace',
-        currentVersion: '1.0',
-        newVersion: '1.1',
-      })
-    ).toEqual('v1.1');
-  });
-  it('bumps short caret to same', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^1.0',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.0.7',
-      })
-    ).toEqual('^1.0');
-  });
-  it('bumps less than to same', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '<2.7.14',
-        rangeStrategy: 'bump',
-        currentVersion: '2.0.3',
-        newVersion: '2.0.4',
-      })
-    ).toEqual('<2.7.14');
-  });
-  it('bumps caret to same', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^1.0.0',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.3.5',
-      })
-    ).toEqual('^1.3.5');
-  });
-  it('replaces caret to same', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^1',
-        rangeStrategy: 'replace',
-        currentVersion: '1.0.0',
-        newVersion: '1.3.5',
-      })
-    ).toEqual('^1');
-  });
-  it('replaces short caret', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^1.0',
-        rangeStrategy: 'replace',
-        currentVersion: '1.0.0',
-        newVersion: '2.3.5',
-      })
-    ).toEqual('^2.0');
-  });
-  it('handles tilde zero', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '~0.2',
-        rangeStrategy: 'replace',
-        currentVersion: '0.2.0',
-        newVersion: '0.3.0',
-      })
-    ).toEqual('~0.3');
-    expect(
-      semver.getNewValue({
-        currentValue: '~0.2',
-        rangeStrategy: 'replace',
-        currentVersion: '0.2.0',
-        newVersion: '1.1.0',
-      })
-    ).toEqual('~1.0');
-  });
-  it('handles tilde major', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '~4',
-        rangeStrategy: 'replace',
-        currentVersion: '4.0.0',
-        newVersion: '4.2.0',
-      })
-    ).toEqual('~4');
-    expect(
-      semver.getNewValue({
-        currentValue: '~4',
-        rangeStrategy: 'replace',
-        currentVersion: '4.0.0',
-        newVersion: '5.1.0',
-      })
-    ).toEqual('~5');
-  });
-  it('handles tilde minor', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '~4.0',
-        rangeStrategy: 'replace',
-        currentVersion: '4.0.0',
-        newVersion: '5.1.0',
-      })
-    ).toEqual('~5.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '~4.0',
-        rangeStrategy: 'replace',
-        currentVersion: '4.0.0',
-        newVersion: '4.1.0',
-      })
-    ).toEqual('~4.1');
-    expect(
-      semver.getNewValue({
-        currentValue: '~1.2 || ~2.0',
-        rangeStrategy: 'replace',
-        currentVersion: '2.0.0',
-        newVersion: '3.1.0',
-      })
-    ).toEqual('~3.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '~1.2 || ~2.0 || ~3.0',
-        rangeStrategy: 'widen',
-        currentVersion: '2.0.0',
-        newVersion: '5.1.0',
-      })
-    ).toEqual('~1.2 || ~2.0 || ~3.0 || ~5.0');
-  });
-  it('handles widen strategy', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^1.2',
-        rangeStrategy: 'widen',
-        currentVersion: '1.2.0',
-        newVersion: '2.0.0',
-      })
-    ).toEqual('^1.2 || ^2.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '~1.2',
-        rangeStrategy: 'widen',
-        currentVersion: '1.2.0',
-        newVersion: '2.4.0',
-      })
-    ).toEqual('~1.2 || ~2.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '~1.2',
-        rangeStrategy: 'widen',
-        currentVersion: '1.2.0',
-        newVersion: '1.9.0',
-      })
-    ).toEqual('~1.2');
-    expect(
-      semver.getNewValue({
-        currentValue: '^1.2',
-        rangeStrategy: 'widen',
-        currentVersion: '1.2.0',
-        newVersion: '1.9.0',
-      })
-    ).toEqual('^1.2');
-    expect(
-      semver.getNewValue({
-        currentValue: '^1.0 || ^2.0',
-        rangeStrategy: 'widen',
-        currentVersion: '2.0.0',
-        newVersion: '2.1.0',
-      })
-    ).toEqual('^1.0 || ^2.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '>=1.0 <3.0',
-        rangeStrategy: 'widen',
-        currentVersion: '2.9.0',
-        newVersion: '4.1.0',
-      })
-    ).toEqual('>=1.0 <4.2');
-    expect(
-      semver.getNewValue({
-        currentValue: '>=1.0 <3.0',
-        rangeStrategy: 'widen',
-        currentVersion: '2.9.0',
-        newVersion: '2.9.5',
-      })
-    ).toEqual('>=1.0 <3.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '>=1.0 <3.0',
-        rangeStrategy: 'widen',
-        currentVersion: '2.9.0',
-        newVersion: '3.0',
-      })
-    ).toEqual('>=1.0 <3.1');
-    expect(
-      semver.getNewValue({
-        currentValue: '>=1.0.0 <=3.0.4',
-        rangeStrategy: 'widen',
-        currentVersion: '2.9.0',
-        newVersion: '3.0.5',
-      })
-    ).toEqual('>=1.0.0 <=3.0.5');
-    expect(
-      semver.getNewValue({
-        currentValue: '~1.0 || >=3.0 <=4.0',
-        rangeStrategy: 'widen',
-        currentVersion: '2.9.0',
-        newVersion: '5.0.0',
-      })
-    ).toEqual('~1.0 || >=3.0 <=5.0');
-  });
-  it('returns newVersion if unsupported', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '+4.0.0',
-        rangeStrategy: 'replace',
-        currentVersion: '4.0.0',
-        newVersion: '4.2.0',
-      })
-    ).toEqual('4.2.0');
-  });
-  it('returns versioned newVersion', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: 'v4.0.0',
-        rangeStrategy: 'replace',
-        currentVersion: '4.0.0',
-        newVersion: '4.2.0',
-      })
-    ).toEqual('v4.2.0');
-  });
-  it('bumps short caret with v', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^v1.0',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.1.7',
-      })
-    ).toEqual('^v1.1');
-  });
-  it('bumps short caret with stability modifiers', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^v1.0@beta',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0-beta3',
-        newVersion: '1.0.0-beta5',
-      })
-    ).toEqual('^v1.0.0-beta5@beta');
-  });
-  it('replaces short caret with stability modifiers', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^v1.0@beta',
-        rangeStrategy: 'replace',
-        currentVersion: '1.0.0-beta3',
-        newVersion: '2.0.0-beta5',
-      })
-    ).toEqual('^v2.0.0-beta5@beta');
-  });
-  it('preserves the current min-stability modifiers', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^4.0@alpha',
-        rangeStrategy: 'replace',
-        currentVersion: '4.0.0-alpha1',
-        newVersion: '4.0.0-beta5',
-      })
-    ).toEqual('^4.0.0-beta5@alpha');
-  });
-  it('handles differing lengths', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '3.6.*',
-        rangeStrategy: 'replace',
-        currentVersion: '3.6.0',
-        newVersion: '3.7',
-      })
-    ).toEqual('3.7.*');
+describe('versioning/composer/index', () => {
+  describe('semver.getPatch(input)', () => {
+    it('gets patch', () => {
+      expect(semver.getPatch('1.2.0')).toEqual(0);
+    });
+  });
+  describe('semver.equals(a, b)', () => {
+    it('should pad short version', () => {
+      expect(semver.equals('1.2.0', 'v1.2')).toBe(true);
+    });
+    it('should pad really short version', () => {
+      expect(semver.equals('v1.0.0', '1')).toBe(true);
+    });
+    it('should translate stability modifier', () => {
+      expect(semver.equals('1.0@alpha3', '1.0.0-alpha.3')).toBe(true);
+      expect(semver.equals('1.0@beta', '1.0.0-beta')).toBe(true);
+      expect(semver.equals('1.0@rc2', '1.0.0-rc.2')).toBe(true);
+    });
+  });
+  describe('semver.isGreaterThan(a, b)', () => {
+    it('should pad short version', () => {
+      expect(semver.isGreaterThan('1.2.0', 'v1.2')).toBe(false);
+    });
+    it('should pad really short version', () => {
+      expect(semver.isGreaterThan('v1.0.1', '1')).toBe(true);
+    });
+    it('should pad both versions', () => {
+      expect(semver.isGreaterThan('1', '1.1')).toBe(false);
+    });
+  });
+  describe('semver.isSingleVersion(input)', () => {
+    it('should pad short version', () => {
+      expect(semver.isSingleVersion('v1.2')).toBeTruthy();
+    });
+  });
+  describe('semver.isStable(input)', () => {
+    it('should pad short version', () => {
+      expect(semver.isStable('v1.2')).toBeTruthy();
+    });
+  });
+  describe('semver.isValid(input)', () => {
+    it('should support simple semver', () => {
+      expect(semver.isValid('1.2.3')).toBeTruthy();
+    });
+    it('should support semver with dash', () => {
+      expect(semver.isValid('1.2.3-foo')).toBeTruthy();
+    });
+    it('should reject semver without dash', () => {
+      expect(semver.isValid('1.2.3foo')).toBeFalsy();
+    });
+    it('should support ranges', () => {
+      expect(semver.isValid('~1.2.3')).toBeTruthy();
+      expect(semver.isValid('^1.2.3')).toBeTruthy();
+      expect(semver.isValid('>1.2.3')).toBeTruthy();
+    });
+    it('should support ranges with stability modifiers', () => {
+      expect(semver.isValid('~1.2.3-beta1')).toBeTruthy();
+      expect(semver.isValid('^1.2.3-alpha')).toBeTruthy();
+      expect(semver.isValid('>1.2.3-rc2')).toBeTruthy();
+    });
+    it('should support ranges with min-stability', () => {
+      expect(semver.isValid('~1.2.3@beta')).toBeTruthy();
+      expect(semver.isValid('^1.2.3@alpha')).toBeTruthy();
+      expect(semver.isValid('>1.2.3@rc')).toBeTruthy();
+    });
+  });
+  describe('semver.isVersion(input)', () => {
+    it('should support simple semver', () => {
+      expect(semver.isValid('1.2.3')).toBeTruthy();
+    });
+    it('should support shortened version', () => {
+      expect(semver.isValid('2.5')).toBeTruthy();
+    });
+    it('should support shortened v version', () => {
+      expect(semver.isValid('v2.5')).toBeTruthy();
+    });
+  });
+  describe('semver.isLessThanRange()', () => {
+    it('handles massaged tilde', () => {
+      expect(semver.isLessThanRange('0.3.1', '~0.4')).toBe(true);
+      expect(semver.isLessThanRange('0.5.1', '~0.4')).toBe(false);
+    });
+  });
+  describe('semver.getSatisfyingVersion()', () => {
+    it('handles massaged tilde', () => {
+      expect(
+        semver.getSatisfyingVersion(
+          ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
+          '~4'
+        )
+      ).toBe('4.2.0');
+      expect(
+        semver.getSatisfyingVersion(
+          ['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0'],
+          '~4'
+        )
+      ).toBe('4.2.0');
+      expect(
+        semver.getSatisfyingVersion(
+          ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
+          '~0.4'
+        )
+      ).toBe('0.5.0');
+    });
+    it('handles prereleases', () => {
+      expect(
+        semver.getSatisfyingVersion(
+          [
+            '0.4.0',
+            '0.5.0',
+            '4.0.0-beta1',
+            '4.0.0-beta2',
+            '4.2.0-beta1',
+            '4.2.0-beta2',
+            '5.0.0',
+          ],
+          '~4@beta'
+        )
+      ).toBe('4.0.0-beta2');
+    });
+  });
+  describe('semver.minSatisfyingVersion()', () => {
+    it('handles massaged tilde', () => {
+      expect(
+        semver.minSatisfyingVersion(
+          ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
+          '~4'
+        )
+      ).toBe('4.0.0');
+      expect(
+        semver.minSatisfyingVersion(
+          ['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0'],
+          '~4'
+        )
+      ).toBe('4.0.0');
+      expect(
+        semver.minSatisfyingVersion(
+          ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
+          '~0.4'
+        )
+      ).toBe('0.4.0');
+    });
+    it('handles prereleases', () => {
+      expect(
+        semver.minSatisfyingVersion(
+          [
+            '0.4.0',
+            '0.5.0',
+            '4.0.0-beta1',
+            '4.0.0',
+            '4.2.0-beta1',
+            '4.2.0-beta2',
+            '5.0.0',
+          ],
+          '~4@beta'
+        )
+      ).toBe('4.0.0-beta1');
+    });
+  });
+  describe('semver.matches()', () => {
+    it('handles massaged tilde', () => {
+      expect(semver.matches('0.3.1', '~0.4')).toBe(false);
+      expect(semver.matches('0.5.1', '~0.4')).toBe(true);
+    });
+  });
+  describe('semver.getNewValue()', () => {
+    it('returns pinned newVersion', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '~1.0',
+          rangeStrategy: 'pin',
+          currentVersion: '1.0',
+          newVersion: 'V1.1',
+        })
+      ).toEqual('V1.1');
+      expect(
+        semver.getNewValue({
+          currentValue: '^1.0',
+          rangeStrategy: 'pin',
+          currentVersion: '1.0',
+          newVersion: 'V1.1',
+        })
+      ).toEqual('V1.1');
+    });
+    it('returns newVersion', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: 'v1.0',
+          rangeStrategy: 'replace',
+          currentVersion: '1.0',
+          newVersion: '1.1',
+        })
+      ).toEqual('v1.1');
+    });
+    it('bumps short caret to same', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^1.0',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.0.7',
+        })
+      ).toEqual('^1.0');
+    });
+    it('bumps less than to same', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '<2.7.14',
+          rangeStrategy: 'bump',
+          currentVersion: '2.0.3',
+          newVersion: '2.0.4',
+        })
+      ).toEqual('<2.7.14');
+    });
+    it('bumps caret to same', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^1.0.0',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.3.5',
+        })
+      ).toEqual('^1.3.5');
+    });
+    it('replaces caret to same', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^1',
+          rangeStrategy: 'replace',
+          currentVersion: '1.0.0',
+          newVersion: '1.3.5',
+        })
+      ).toEqual('^1');
+    });
+    it('replaces short caret', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^1.0',
+          rangeStrategy: 'replace',
+          currentVersion: '1.0.0',
+          newVersion: '2.3.5',
+        })
+      ).toEqual('^2.0');
+    });
+    it('handles tilde zero', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '~0.2',
+          rangeStrategy: 'replace',
+          currentVersion: '0.2.0',
+          newVersion: '0.3.0',
+        })
+      ).toEqual('~0.3');
+      expect(
+        semver.getNewValue({
+          currentValue: '~0.2',
+          rangeStrategy: 'replace',
+          currentVersion: '0.2.0',
+          newVersion: '1.1.0',
+        })
+      ).toEqual('~1.0');
+    });
+    it('handles tilde major', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '~4',
+          rangeStrategy: 'replace',
+          currentVersion: '4.0.0',
+          newVersion: '4.2.0',
+        })
+      ).toEqual('~4');
+      expect(
+        semver.getNewValue({
+          currentValue: '~4',
+          rangeStrategy: 'replace',
+          currentVersion: '4.0.0',
+          newVersion: '5.1.0',
+        })
+      ).toEqual('~5');
+    });
+    it('handles tilde minor', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '~4.0',
+          rangeStrategy: 'replace',
+          currentVersion: '4.0.0',
+          newVersion: '5.1.0',
+        })
+      ).toEqual('~5.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '~4.0',
+          rangeStrategy: 'replace',
+          currentVersion: '4.0.0',
+          newVersion: '4.1.0',
+        })
+      ).toEqual('~4.1');
+      expect(
+        semver.getNewValue({
+          currentValue: '~1.2 || ~2.0',
+          rangeStrategy: 'replace',
+          currentVersion: '2.0.0',
+          newVersion: '3.1.0',
+        })
+      ).toEqual('~3.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '~1.2 || ~2.0 || ~3.0',
+          rangeStrategy: 'widen',
+          currentVersion: '2.0.0',
+          newVersion: '5.1.0',
+        })
+      ).toEqual('~1.2 || ~2.0 || ~3.0 || ~5.0');
+    });
+    it('handles widen strategy', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^1.2',
+          rangeStrategy: 'widen',
+          currentVersion: '1.2.0',
+          newVersion: '2.0.0',
+        })
+      ).toEqual('^1.2 || ^2.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '~1.2',
+          rangeStrategy: 'widen',
+          currentVersion: '1.2.0',
+          newVersion: '2.4.0',
+        })
+      ).toEqual('~1.2 || ~2.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '~1.2',
+          rangeStrategy: 'widen',
+          currentVersion: '1.2.0',
+          newVersion: '1.9.0',
+        })
+      ).toEqual('~1.2');
+      expect(
+        semver.getNewValue({
+          currentValue: '^1.2',
+          rangeStrategy: 'widen',
+          currentVersion: '1.2.0',
+          newVersion: '1.9.0',
+        })
+      ).toEqual('^1.2');
+      expect(
+        semver.getNewValue({
+          currentValue: '^1.0 || ^2.0',
+          rangeStrategy: 'widen',
+          currentVersion: '2.0.0',
+          newVersion: '2.1.0',
+        })
+      ).toEqual('^1.0 || ^2.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '>=1.0 <3.0',
+          rangeStrategy: 'widen',
+          currentVersion: '2.9.0',
+          newVersion: '4.1.0',
+        })
+      ).toEqual('>=1.0 <4.2');
+      expect(
+        semver.getNewValue({
+          currentValue: '>=1.0 <3.0',
+          rangeStrategy: 'widen',
+          currentVersion: '2.9.0',
+          newVersion: '2.9.5',
+        })
+      ).toEqual('>=1.0 <3.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '>=1.0 <3.0',
+          rangeStrategy: 'widen',
+          currentVersion: '2.9.0',
+          newVersion: '3.0',
+        })
+      ).toEqual('>=1.0 <3.1');
+      expect(
+        semver.getNewValue({
+          currentValue: '>=1.0.0 <=3.0.4',
+          rangeStrategy: 'widen',
+          currentVersion: '2.9.0',
+          newVersion: '3.0.5',
+        })
+      ).toEqual('>=1.0.0 <=3.0.5');
+      expect(
+        semver.getNewValue({
+          currentValue: '~1.0 || >=3.0 <=4.0',
+          rangeStrategy: 'widen',
+          currentVersion: '2.9.0',
+          newVersion: '5.0.0',
+        })
+      ).toEqual('~1.0 || >=3.0 <=5.0');
+    });
+    it('returns newVersion if unsupported', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '+4.0.0',
+          rangeStrategy: 'replace',
+          currentVersion: '4.0.0',
+          newVersion: '4.2.0',
+        })
+      ).toEqual('4.2.0');
+    });
+    it('returns versioned newVersion', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: 'v4.0.0',
+          rangeStrategy: 'replace',
+          currentVersion: '4.0.0',
+          newVersion: '4.2.0',
+        })
+      ).toEqual('v4.2.0');
+    });
+    it('bumps short caret with v', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^v1.0',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.1.7',
+        })
+      ).toEqual('^v1.1');
+    });
+    it('bumps short caret with stability modifiers', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^v1.0@beta',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0-beta3',
+          newVersion: '1.0.0-beta5',
+        })
+      ).toEqual('^v1.0.0-beta5@beta');
+    });
+    it('replaces short caret with stability modifiers', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^v1.0@beta',
+          rangeStrategy: 'replace',
+          currentVersion: '1.0.0-beta3',
+          newVersion: '2.0.0-beta5',
+        })
+      ).toEqual('^v2.0.0-beta5@beta');
+    });
+    it('preserves the current min-stability modifiers', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^4.0@alpha',
+          rangeStrategy: 'replace',
+          currentVersion: '4.0.0-alpha1',
+          newVersion: '4.0.0-beta5',
+        })
+      ).toEqual('^4.0.0-beta5@alpha');
+    });
+    it('handles differing lengths', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '3.6.*',
+          rangeStrategy: 'replace',
+          currentVersion: '3.6.0',
+          newVersion: '3.7',
+        })
+      ).toEqual('3.7.*');
 
-    expect(
-      semver.getNewValue({
-        currentValue: 'v3.1.*',
-        rangeStrategy: 'replace',
-        currentVersion: '3.1.10',
-        newVersion: '3.2.0',
-      })
-    ).toEqual('v3.2.*'); // #5388
-  });
-  it('handles update-lockfile strategy', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^0.1',
-        rangeStrategy: 'update-lockfile',
-        currentVersion: '0.1.0',
-        newVersion: '0.1.1',
-      })
-    ).toEqual('^0.1');
-    expect(
-      semver.getNewValue({
-        currentValue: '^0.1',
-        rangeStrategy: 'update-lockfile',
-        currentVersion: '0.1.0',
-        newVersion: '0.2.0',
-      })
-    ).toEqual('^0.2');
+      expect(
+        semver.getNewValue({
+          currentValue: 'v3.1.*',
+          rangeStrategy: 'replace',
+          currentVersion: '3.1.10',
+          newVersion: '3.2.0',
+        })
+      ).toEqual('v3.2.*'); // #5388
+    });
+    it('handles update-lockfile strategy', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^0.1',
+          rangeStrategy: 'update-lockfile',
+          currentVersion: '0.1.0',
+          newVersion: '0.1.1',
+        })
+      ).toEqual('^0.1');
+      expect(
+        semver.getNewValue({
+          currentValue: '^0.1',
+          rangeStrategy: 'update-lockfile',
+          currentVersion: '0.1.0',
+          newVersion: '0.2.0',
+        })
+      ).toEqual('^0.2');
 
-    expect(
-      semver.getNewValue({
-        currentValue: '^5.1',
-        rangeStrategy: 'update-lockfile',
-        currentVersion: '5.1.0',
-        newVersion: '5.2.0',
-      })
-    ).toEqual('^5.1');
-    expect(
-      semver.getNewValue({
-        currentValue: '^5.1',
-        rangeStrategy: 'update-lockfile',
-        currentVersion: '5.1.0',
-        newVersion: '6.0.0',
-      })
-    ).toEqual('^6.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '^5.1',
+          rangeStrategy: 'update-lockfile',
+          currentVersion: '5.1.0',
+          newVersion: '5.2.0',
+        })
+      ).toEqual('^5.1');
+      expect(
+        semver.getNewValue({
+          currentValue: '^5.1',
+          rangeStrategy: 'update-lockfile',
+          currentVersion: '5.1.0',
+          newVersion: '6.0.0',
+        })
+      ).toEqual('^6.0');
 
-    expect(
-      semver.getNewValue({
-        currentValue: '^5',
-        rangeStrategy: 'update-lockfile',
-        currentVersion: '5.1.0',
-        newVersion: '5.2.0',
-      })
-    ).toEqual('^5');
-    expect(
-      semver.getNewValue({
-        currentValue: '^5',
-        rangeStrategy: 'update-lockfile',
-        currentVersion: '5.1.0',
-        newVersion: '6.0.0',
-      })
-    ).toEqual('^6');
-  });
-});
-describe('.sortVersions', () => {
-  it('sorts versions in an ascending order', () => {
-    expect(
-      ['1.2.3-beta', '2.0.1', '1.3.4', '1.2.3'].sort(semver.sortVersions)
-    ).toEqual(['1.2.3-beta', '1.2.3', '1.3.4', '2.0.1']);
+      expect(
+        semver.getNewValue({
+          currentValue: '^5',
+          rangeStrategy: 'update-lockfile',
+          currentVersion: '5.1.0',
+          newVersion: '5.2.0',
+        })
+      ).toEqual('^5');
+      expect(
+        semver.getNewValue({
+          currentValue: '^5',
+          rangeStrategy: 'update-lockfile',
+          currentVersion: '5.1.0',
+          newVersion: '6.0.0',
+        })
+      ).toEqual('^6');
+    });
+  });
+  describe('.sortVersions', () => {
+    it('sorts versions in an ascending order', () => {
+      expect(
+        ['1.2.3-beta', '2.0.1', '1.3.4', '1.2.3'].sort(semver.sortVersions)
+      ).toEqual(['1.2.3-beta', '1.2.3', '1.3.4', '2.0.1']);
+    });
   });
 });
diff --git a/lib/versioning/docker/index.spec.ts b/lib/versioning/docker/index.spec.ts
index 06fbc4f0c9..c0248646e1 100644
--- a/lib/versioning/docker/index.spec.ts
+++ b/lib/versioning/docker/index.spec.ts
@@ -1,7 +1,7 @@
 import semver from '../semver';
 import docker from '.';
 
-describe('docker.', () => {
+describe('versioning/docker/index', () => {
   describe('isValid(version)', () => {
     it('should support all versions length', () => {
       expect(docker.isValid(null)).toBeNull();
diff --git a/lib/versioning/git/index.spec.ts b/lib/versioning/git/index.spec.ts
index 0929f4ceaa..41d2a764cc 100644
--- a/lib/versioning/git/index.spec.ts
+++ b/lib/versioning/git/index.spec.ts
@@ -1,6 +1,6 @@
 import git from '.';
 
-describe('git.', () => {
+describe('versioning/git/index', () => {
   describe('isValid(version)', () => {
     it('should return true', () => {
       expect(git.isValid('a1')).toBeTruthy();
diff --git a/lib/versioning/gradle/index.spec.ts b/lib/versioning/gradle/index.spec.ts
index d6244ad035..1d8afc0eeb 100644
--- a/lib/versioning/gradle/index.spec.ts
+++ b/lib/versioning/gradle/index.spec.ts
@@ -1,8 +1,7 @@
-import { getName } from '../../../test/util';
 import { compare, parseMavenBasedRange, parsePrefixRange } from './compare';
 import { api } from '.';
 
-describe(getName(), () => {
+describe('versioning/gradle/index', () => {
   it('returns equality', () => {
     expect(compare('1', '1')).toEqual(0);
     expect(compare('a', 'a')).toEqual(0);
@@ -118,9 +117,7 @@ describe(getName(), () => {
       expect(range).toBeNull();
     });
   });
-});
 
-describe(getName(), () => {
   it('isValid', () => {
     expect(api.isValid('1.0.0')).toBe(true);
     expect(api.isValid('[1.12.6,1.18.6]')).toBe(true);
diff --git a/lib/versioning/hashicorp/index.spec.ts b/lib/versioning/hashicorp/index.spec.ts
index 52aac2ef2d..b6e06d3639 100644
--- a/lib/versioning/hashicorp/index.spec.ts
+++ b/lib/versioning/hashicorp/index.spec.ts
@@ -1,123 +1,125 @@
 import { api as semver } from '.';
 
-describe('semver.matches()', () => {
-  it('handles tilde greater than', () => {
-    expect(semver.matches('4.2.0', '~> 4.0')).toBe(true);
-    expect(semver.matches('4.2.0', '~> 4.0.0')).toBe(false);
+describe('versioning/hashicorp/index', () => {
+  describe('semver.matches()', () => {
+    it('handles tilde greater than', () => {
+      expect(semver.matches('4.2.0', '~> 4.0')).toBe(true);
+      expect(semver.matches('4.2.0', '~> 4.0.0')).toBe(false);
+    });
   });
-});
-describe('semver.getSatisfyingVersion()', () => {
-  it('handles tilde greater than', () => {
-    expect(
-      semver.getSatisfyingVersion(
-        ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
-        '~> 4.0'
-      )
-    ).toBe('4.2.0');
-    expect(
-      semver.getSatisfyingVersion(
-        ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
-        '~> 4.0.0'
-      )
-    ).toBe('4.0.0');
-  });
-});
-describe('semver.isValid()', () => {
-  it('handles comma', () => {
-    expect(semver.isValid('>= 1.0.0, <= 2.0.0')).toBeTruthy();
+  describe('semver.getSatisfyingVersion()', () => {
+    it('handles tilde greater than', () => {
+      expect(
+        semver.getSatisfyingVersion(
+          ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
+          '~> 4.0'
+        )
+      ).toBe('4.2.0');
+      expect(
+        semver.getSatisfyingVersion(
+          ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
+          '~> 4.0.0'
+        )
+      ).toBe('4.0.0');
+    });
   });
-});
-describe('semver.isLessThanRange()', () => {
-  it('handles comma', () => {
-    expect(semver.isLessThanRange('0.9.0', '>= 1.0.0, <= 2.0.0')).toBe(true);
-    expect(semver.isLessThanRange('1.9.0', '>= 1.0.0, <= 2.0.0')).toBe(false);
+  describe('semver.isValid()', () => {
+    it('handles comma', () => {
+      expect(semver.isValid('>= 1.0.0, <= 2.0.0')).toBeTruthy();
+    });
   });
-});
-describe('semver.minSatisfyingVersion()', () => {
-  it('handles tilde greater than', () => {
-    expect(
-      semver.minSatisfyingVersion(
-        ['0.4.0', '0.5.0', '4.2.0', '5.0.0'],
-        '~> 4.0'
-      )
-    ).toBe('4.2.0');
-    expect(
-      semver.minSatisfyingVersion(
-        ['0.4.0', '0.5.0', '4.2.0', '5.0.0'],
-        '~> 4.0.0'
-      )
-    ).toBeNull();
-  });
-});
-describe('semver.getNewValue()', () => {
-  it('handles tilde greater than', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '~> 1.2',
-        rangeStrategy: 'replace',
-        currentVersion: '1.2.3',
-        newVersion: '2.0.7',
-      })
-    ).toEqual('~> 2.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '~> 1.2.0',
-        rangeStrategy: 'replace',
-        currentVersion: '1.2.3',
-        newVersion: '2.0.7',
-      })
-    ).toEqual('~> 2.0.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '~> 0.14.0',
-        rangeStrategy: 'replace',
-        currentVersion: '0.14.1',
-        newVersion: '0.15.0',
-      })
-    ).toEqual('~> 0.15.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '~> 0.14.0',
-        rangeStrategy: 'replace',
-        currentVersion: '0.14.1',
-        newVersion: '0.15.1',
-      })
-    ).toEqual('~> 0.15.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '~> 0.14.6',
-        rangeStrategy: 'replace',
-        currentVersion: '0.14.6',
-        newVersion: '0.15.0',
-      })
-    ).toEqual('~> 0.15.0');
+  describe('semver.isLessThanRange()', () => {
+    it('handles comma', () => {
+      expect(semver.isLessThanRange('0.9.0', '>= 1.0.0, <= 2.0.0')).toBe(true);
+      expect(semver.isLessThanRange('1.9.0', '>= 1.0.0, <= 2.0.0')).toBe(false);
+    });
   });
-  it('handles comma dividers', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '>= 1.0.0, <= 2.0.0',
-        rangeStrategy: 'widen',
-        currentVersion: '1.2.3',
-        newVersion: '2.0.7',
-      })
-    ).toEqual('>= 1.0.0, <= 2.0.7');
+  describe('semver.minSatisfyingVersion()', () => {
+    it('handles tilde greater than', () => {
+      expect(
+        semver.minSatisfyingVersion(
+          ['0.4.0', '0.5.0', '4.2.0', '5.0.0'],
+          '~> 4.0'
+        )
+      ).toBe('4.2.0');
+      expect(
+        semver.minSatisfyingVersion(
+          ['0.4.0', '0.5.0', '4.2.0', '5.0.0'],
+          '~> 4.0.0'
+        )
+      ).toBeNull();
+    });
   });
-  it('updates short ranges', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '0.14',
-        rangeStrategy: 'replace',
-        currentVersion: '0.14.2',
-        newVersion: '0.15.0',
-      })
-    ).toEqual('0.15');
-    expect(
-      semver.getNewValue({
-        currentValue: '~> 0.14',
-        rangeStrategy: 'replace',
-        currentVersion: '0.14.2',
-        newVersion: '0.15.0',
-      })
-    ).toEqual('~> 0.15');
+  describe('semver.getNewValue()', () => {
+    it('handles tilde greater than', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '~> 1.2',
+          rangeStrategy: 'replace',
+          currentVersion: '1.2.3',
+          newVersion: '2.0.7',
+        })
+      ).toEqual('~> 2.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '~> 1.2.0',
+          rangeStrategy: 'replace',
+          currentVersion: '1.2.3',
+          newVersion: '2.0.7',
+        })
+      ).toEqual('~> 2.0.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '~> 0.14.0',
+          rangeStrategy: 'replace',
+          currentVersion: '0.14.1',
+          newVersion: '0.15.0',
+        })
+      ).toEqual('~> 0.15.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '~> 0.14.0',
+          rangeStrategy: 'replace',
+          currentVersion: '0.14.1',
+          newVersion: '0.15.1',
+        })
+      ).toEqual('~> 0.15.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '~> 0.14.6',
+          rangeStrategy: 'replace',
+          currentVersion: '0.14.6',
+          newVersion: '0.15.0',
+        })
+      ).toEqual('~> 0.15.0');
+    });
+    it('handles comma dividers', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '>= 1.0.0, <= 2.0.0',
+          rangeStrategy: 'widen',
+          currentVersion: '1.2.3',
+          newVersion: '2.0.7',
+        })
+      ).toEqual('>= 1.0.0, <= 2.0.7');
+    });
+    it('updates short ranges', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '0.14',
+          rangeStrategy: 'replace',
+          currentVersion: '0.14.2',
+          newVersion: '0.15.0',
+        })
+      ).toEqual('0.15');
+      expect(
+        semver.getNewValue({
+          currentValue: '~> 0.14',
+          rangeStrategy: 'replace',
+          currentVersion: '0.14.2',
+          newVersion: '0.15.0',
+        })
+      ).toEqual('~> 0.15');
+    });
   });
 });
diff --git a/lib/versioning/hex/index.spec.ts b/lib/versioning/hex/index.spec.ts
index a4e219d6e0..4388e00198 100644
--- a/lib/versioning/hex/index.spec.ts
+++ b/lib/versioning/hex/index.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { api as hexScheme } from '.';
 
-describe(getName(), () => {
+describe('versioning/hex/index', () => {
   describe('hexScheme.matches()', () => {
     it('handles tilde greater than', () => {
       expect(hexScheme.matches('4.2.0', '~> 4.0')).toBe(true);
diff --git a/lib/versioning/index.spec.ts b/lib/versioning/index.spec.ts
index 5b65cb507d..9de3bba101 100644
--- a/lib/versioning/index.spec.ts
+++ b/lib/versioning/index.spec.ts
@@ -10,7 +10,7 @@ const supportedSchemes = getOptions().find(
   (option) => option.name === 'versioning'
 ).allowedValues;
 
-describe('allVersioning.get(versioning)', () => {
+describe('versioning/index', () => {
   it('has api', () => {
     // FIXME: explicit assert condition
     expect(Object.keys(allVersioning.get('semver')).sort()).toMatchSnapshot();
diff --git a/lib/versioning/ivy/index.spec.ts b/lib/versioning/ivy/index.spec.ts
index 57bbee5558..de14e05257 100644
--- a/lib/versioning/ivy/index.spec.ts
+++ b/lib/versioning/ivy/index.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../../test/util';
 import {
   REV_TYPE_LATEST,
   REV_TYPE_RANGE,
@@ -9,7 +8,7 @@ import ivy from '.';
 
 const { getNewValue, isValid, isVersion, matches } = ivy;
 
-describe(getName(), () => {
+describe('versioning/ivy/index', () => {
   it('parses dynamic revisions', () => {
     expect(parseDynamicRevision(null)).toBeNull();
     expect(parseDynamicRevision('')).toBeNull();
@@ -59,9 +58,7 @@ describe(getName(), () => {
 
     expect(parseDynamicRevision('[0,1),(1,)')).toBeNull();
   });
-});
 
-describe(getName(), () => {
   it('isValid', () => {
     expect(isValid('')).toBe(false);
     expect(isValid('1.0.0')).toBe(true);
diff --git a/lib/versioning/loose/__snapshots__/index.spec.ts.snap b/lib/versioning/loose/__snapshots__/index.spec.ts.snap
index 197f6bb52e..54c1f1d20b 100644
--- a/lib/versioning/loose/__snapshots__/index.spec.ts.snap
+++ b/lib/versioning/loose/__snapshots__/index.spec.ts.snap
@@ -1,7 +1,7 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`loose. isVersion 1.1 1`] = `"1.1"`;
+exports[`versioning/loose/index isVersion 1.1 1`] = `"1.1"`;
 
-exports[`loose. isVersion 1.3.RC2 1`] = `"1.3.RC2"`;
+exports[`versioning/loose/index isVersion 1.3.RC2 1`] = `"1.3.RC2"`;
 
-exports[`loose. isVersion 2.1-rc2 1`] = `"2.1-rc2"`;
+exports[`versioning/loose/index isVersion 2.1-rc2 1`] = `"2.1-rc2"`;
diff --git a/lib/versioning/loose/index.spec.ts b/lib/versioning/loose/index.spec.ts
index 3983cda500..62d5bd1c4a 100644
--- a/lib/versioning/loose/index.spec.ts
+++ b/lib/versioning/loose/index.spec.ts
@@ -1,6 +1,6 @@
 import loose from '.';
 
-describe('loose.', () => {
+describe('versioning/loose/index', () => {
   describe('isVersion', () => {
     ['1.1', '1.3.RC2', '2.1-rc2'].forEach((version) => {
       it(version, () => {
diff --git a/lib/versioning/loose/utils.spec.ts b/lib/versioning/loose/utils.spec.ts
index 880e3ee8c1..91b33aec2a 100644
--- a/lib/versioning/loose/utils.spec.ts
+++ b/lib/versioning/loose/utils.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { GenericVersion, GenericVersioningApi } from './generic';
 
-describe(getName(), () => {
+describe('versioning/loose/utils', () => {
   const optionalFunctions = [
     'isLessThanRange',
     'valueToVersion',
diff --git a/lib/versioning/maven/index.spec.ts b/lib/versioning/maven/index.spec.ts
index 8ca9826afa..4f2e0a0be7 100644
--- a/lib/versioning/maven/index.spec.ts
+++ b/lib/versioning/maven/index.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../../test/util';
 import {
   autoExtendMavenRange,
   compare,
@@ -18,7 +17,7 @@ const {
   getNewValue,
 } = maven;
 
-describe(getName(), () => {
+describe('versioning/maven/index', () => {
   it('returns equality', () => {
     expect(compare('1.0.0', '1')).toEqual(0);
     expect(compare('1-a1', '1-alpha-1')).toEqual(0);
@@ -295,9 +294,7 @@ describe(getName(), () => {
       expect(autoExtendMavenRange(oldRepr, newValue)).toEqual(newRepr);
     });
   });
-});
 
-describe(getName(), () => {
   it('returns valid', () => {
     expect(isValid('1.0.0')).toBe(true);
     expect(isValid('[1.12.6,1.18.6]')).toBe(true);
diff --git a/lib/versioning/node/index.spec.ts b/lib/versioning/node/index.spec.ts
index 7577e009d8..05ed63c555 100644
--- a/lib/versioning/node/index.spec.ts
+++ b/lib/versioning/node/index.spec.ts
@@ -1,7 +1,7 @@
 import { DateTime } from 'luxon';
 import { isStable, isValid, api as nodever } from '.';
 
-describe('semver.getNewValue()', () => {
+describe('versioning/node/index', () => {
   let dtLocal: any;
   beforeEach(() => {
     dtLocal = DateTime.local;
diff --git a/lib/versioning/npm/index.spec.ts b/lib/versioning/npm/index.spec.ts
index 73e5f5bd00..bc2f51a317 100644
--- a/lib/versioning/npm/index.spec.ts
+++ b/lib/versioning/npm/index.spec.ts
@@ -1,362 +1,364 @@
 import { api as semver } from '.';
 
-describe('semver.isValid(input)', () => {
-  it('should return null for irregular versions', () => {
-    expect(semver.isValid('17.04.0')).toBeFalsy();
-  });
-  it('should support simple semver', () => {
-    expect(semver.isValid('1.2.3')).toBeTruthy();
-  });
-  it('should support semver with dash', () => {
-    expect(semver.isValid('1.2.3-foo')).toBeTruthy();
-  });
-  it('should reject semver without dash', () => {
-    expect(semver.isValid('1.2.3foo')).toBeFalsy();
-  });
-  it('should support ranges', () => {
-    expect(semver.isValid('~1.2.3')).toBeTruthy();
-    expect(semver.isValid('^1.2.3')).toBeTruthy();
-    expect(semver.isValid('>1.2.3')).toBeTruthy();
-  });
-  it('should reject github repositories', () => {
-    expect(semver.isValid('renovatebot/renovate')).toBeFalsy();
-    expect(semver.isValid('renovatebot/renovate#master')).toBeFalsy();
-    expect(
-      semver.isValid('https://github.com/renovatebot/renovate.git')
-    ).toBeFalsy();
-  });
-});
-describe('semver.isSingleVersion()', () => {
-  it('returns true if naked version', () => {
-    expect(semver.isSingleVersion('1.2.3')).toBeTruthy();
-    expect(semver.isSingleVersion('1.2.3-alpha.1')).toBeTruthy();
-  });
-  it('returns true if equals', () => {
-    expect(semver.isSingleVersion('=1.2.3')).toBeTruthy();
-    expect(semver.isSingleVersion('= 1.2.3')).toBeTruthy();
-  });
-  it('returns false when not version', () => {
-    expect(semver.isSingleVersion('1.x')).toBeFalsy();
-  });
-});
-describe('semver.getNewValue()', () => {
-  it('bumps equals', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '=1.0.0',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.1.0',
-      })
-    ).toEqual('=1.1.0');
-  });
-  it('bumps short caret to same', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^1.0',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.0.7',
-      })
-    ).toEqual('^1.0');
+describe('versioning/npm/index', () => {
+  describe('semver.isValid(input)', () => {
+    it('should return null for irregular versions', () => {
+      expect(semver.isValid('17.04.0')).toBeFalsy();
+    });
+    it('should support simple semver', () => {
+      expect(semver.isValid('1.2.3')).toBeTruthy();
+    });
+    it('should support semver with dash', () => {
+      expect(semver.isValid('1.2.3-foo')).toBeTruthy();
+    });
+    it('should reject semver without dash', () => {
+      expect(semver.isValid('1.2.3foo')).toBeFalsy();
+    });
+    it('should support ranges', () => {
+      expect(semver.isValid('~1.2.3')).toBeTruthy();
+      expect(semver.isValid('^1.2.3')).toBeTruthy();
+      expect(semver.isValid('>1.2.3')).toBeTruthy();
+    });
+    it('should reject github repositories', () => {
+      expect(semver.isValid('renovatebot/renovate')).toBeFalsy();
+      expect(semver.isValid('renovatebot/renovate#master')).toBeFalsy();
+      expect(
+        semver.isValid('https://github.com/renovatebot/renovate.git')
+      ).toBeFalsy();
+    });
   });
-  it('bumps caret to prerelease', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^1',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.0.7-prerelease.1',
-      })
-    ).toEqual('^1.0.7-prerelease.1');
+  describe('semver.isSingleVersion()', () => {
+    it('returns true if naked version', () => {
+      expect(semver.isSingleVersion('1.2.3')).toBeTruthy();
+      expect(semver.isSingleVersion('1.2.3-alpha.1')).toBeTruthy();
+    });
+    it('returns true if equals', () => {
+      expect(semver.isSingleVersion('=1.2.3')).toBeTruthy();
+      expect(semver.isSingleVersion('= 1.2.3')).toBeTruthy();
+    });
+    it('returns false when not version', () => {
+      expect(semver.isSingleVersion('1.x')).toBeFalsy();
+    });
   });
-  it('replaces with newer', () => {
-    [
-      ['^0.0.3', '0.0.6', '^0.0.6'],
-      ['^0.0.3', '0.5.0', '^0.5.0'],
-      ['^0.0.3', '0.5.6', '^0.5.0'],
-      ['^0.0.3', '4.0.0', '^4.0.0'],
-      ['^0.0.3', '4.0.6', '^4.0.0'],
-      ['^0.0.3', '4.5.6', '^4.0.0'],
-      ['^0.2.0', '0.5.6', '^0.5.0'],
-      ['^0.2.3', '0.5.0', '^0.5.0'],
-      ['^0.2.3', '0.5.6', '^0.5.0'],
-      ['^1.2.3', '4.0.0', '^4.0.0'],
-      ['^1.2.3', '4.5.6', '^4.0.0'],
-      ['^1.0.0', '4.5.6', '^4.0.0'],
+  describe('semver.getNewValue()', () => {
+    it('bumps equals', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '=1.0.0',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.1.0',
+        })
+      ).toEqual('=1.1.0');
+    });
+    it('bumps short caret to same', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^1.0',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.0.7',
+        })
+      ).toEqual('^1.0');
+    });
+    it('bumps caret to prerelease', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^1',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.0.7-prerelease.1',
+        })
+      ).toEqual('^1.0.7-prerelease.1');
+    });
+    it('replaces with newer', () => {
+      [
+        ['^0.0.3', '0.0.6', '^0.0.6'],
+        ['^0.0.3', '0.5.0', '^0.5.0'],
+        ['^0.0.3', '0.5.6', '^0.5.0'],
+        ['^0.0.3', '4.0.0', '^4.0.0'],
+        ['^0.0.3', '4.0.6', '^4.0.0'],
+        ['^0.0.3', '4.5.6', '^4.0.0'],
+        ['^0.2.0', '0.5.6', '^0.5.0'],
+        ['^0.2.3', '0.5.0', '^0.5.0'],
+        ['^0.2.3', '0.5.6', '^0.5.0'],
+        ['^1.2.3', '4.0.0', '^4.0.0'],
+        ['^1.2.3', '4.5.6', '^4.0.0'],
+        ['^1.0.0', '4.5.6', '^4.0.0'],
 
-      ['^0.2.3', '0.2.4', '^0.2.3'],
-      ['^2.3.0', '2.4.0', '^2.3.0'],
-      ['^2.3.4', '2.4.5', '^2.3.4'],
-      ['^0.0.1', '0.0.2', '^0.0.2'],
-      ['^1.0.1', '2.0.2', '^2.0.0'],
-      ['^1.2.3', '1.2.3', '^1.2.3'],
-      ['^1.2.3', '1.2.2', '^1.2.2'],
+        ['^0.2.3', '0.2.4', '^0.2.3'],
+        ['^2.3.0', '2.4.0', '^2.3.0'],
+        ['^2.3.4', '2.4.5', '^2.3.4'],
+        ['^0.0.1', '0.0.2', '^0.0.2'],
+        ['^1.0.1', '2.0.2', '^2.0.0'],
+        ['^1.2.3', '1.2.3', '^1.2.3'],
+        ['^1.2.3', '1.2.2', '^1.2.2'],
 
-      ['^0.9.21', '0.9.22', '^0.9.21'], // #4762
-    ].forEach(([currentValue, newVersion, expectedValue]) => {
+        ['^0.9.21', '0.9.22', '^0.9.21'], // #4762
+      ].forEach(([currentValue, newVersion, expectedValue]) => {
+        expect(
+          semver.getNewValue({
+            currentValue,
+            rangeStrategy: 'replace',
+            currentVersion: currentValue.replace('^', ''),
+            newVersion,
+          })
+        ).toEqual(expectedValue);
+      });
+    });
+    it('supports tilde greater than', () => {
       expect(
         semver.getNewValue({
-          currentValue,
+          currentValue: '~> 1.0.0',
           rangeStrategy: 'replace',
-          currentVersion: currentValue.replace('^', ''),
-          newVersion,
+          currentVersion: '1.0.0',
+          newVersion: '1.1.7',
         })
-      ).toEqual(expectedValue);
+      ).toEqual('~> 1.1.0');
+    });
+    it('bumps short caret to new', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^1.0',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.1.7',
+        })
+      ).toEqual('^1.1');
+    });
+    it('bumps short tilde', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '~1.0',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.1.7',
+        })
+      ).toEqual('~1.1');
+    });
+    it('bumps tilde to prerelease', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '~1.0',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.0.7-prerelease.1',
+        })
+      ).toEqual('~1.0.7-prerelease.1');
+    });
+    it('updates naked caret', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '^1',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '2.1.7',
+        })
+      ).toEqual('^2');
+    });
+    it('bumps naked tilde', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '~1',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.1.7',
+        })
+      ).toEqual('~1');
+    });
+    it('bumps naked major', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '5',
+          rangeStrategy: 'bump',
+          currentVersion: '5.0.0',
+          newVersion: '5.1.7',
+        })
+      ).toEqual('5');
+      expect(
+        semver.getNewValue({
+          currentValue: '5',
+          rangeStrategy: 'bump',
+          currentVersion: '5.0.0',
+          newVersion: '6.1.7',
+        })
+      ).toEqual('6');
+    });
+    it('bumps naked minor', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '5.0',
+          rangeStrategy: 'bump',
+          currentVersion: '5.0.0',
+          newVersion: '5.0.7',
+        })
+      ).toEqual('5.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '5.0',
+          rangeStrategy: 'bump',
+          currentVersion: '5.0.0',
+          newVersion: '5.1.7',
+        })
+      ).toEqual('5.1');
+      expect(
+        semver.getNewValue({
+          currentValue: '5.0',
+          rangeStrategy: 'bump',
+          currentVersion: '5.0.0',
+          newVersion: '6.1.7',
+        })
+      ).toEqual('6.1');
+    });
+    it('bumps greater or equals', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '>=1.0.0',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.1.0',
+        })
+      ).toEqual('>=1.1.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '>= 1.0.0',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.1.0',
+        })
+      ).toEqual('>= 1.1.0');
+    });
+    it('replaces equals', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '=1.0.0',
+          rangeStrategy: 'replace',
+          currentVersion: '1.0.0',
+          newVersion: '1.1.0',
+        })
+      ).toEqual('=1.1.0');
+    });
+    it('handles long asterisk', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '1.0.*',
+          rangeStrategy: 'replace',
+          currentVersion: '1.0.0',
+          newVersion: '1.1.0',
+        })
+      ).toEqual('1.1.*');
+    });
+    it('handles short asterisk', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '1.*',
+          rangeStrategy: 'replace',
+          currentVersion: '1.0.0',
+          newVersion: '2.1.0',
+        })
+      ).toEqual('2.*');
+    });
+    it('handles updating from stable to unstable', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '~0.6.1',
+          rangeStrategy: 'replace',
+          currentVersion: '0.6.8',
+          newVersion: '0.7.0-rc.2',
+        })
+      ).toEqual('~0.7.0-rc');
+    });
+    it('bumps complex ranges', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '>= 0.1.21 < 0.2.0',
+          rangeStrategy: 'bump',
+          currentVersion: '0.1.21',
+          newVersion: '0.1.24',
+        })
+      ).toEqual('>= 0.1.24 < 0.2.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '>= 0.1.21 <= 0.2.0',
+          rangeStrategy: 'bump',
+          currentVersion: '0.1.21',
+          newVersion: '0.1.24',
+        })
+      ).toEqual('>= 0.1.24 <= 0.2.0');
+      expect(
+        semver.getNewValue({
+          currentValue: '>= 0.0.1 <= 0.1',
+          rangeStrategy: 'bump',
+          currentVersion: '0.0.1',
+          newVersion: '0.0.2',
+        })
+      ).toEqual('>= 0.0.2 <= 0.1');
+      expect(
+        semver.getNewValue({
+          currentValue: '>= 0.0.1 < 0.1',
+          rangeStrategy: 'bump',
+          currentVersion: '0.1.0',
+          newVersion: '0.2.1',
+        })
+      ).toEqual('>= 0.2.1 < 0.3');
+      expect(
+        semver.getNewValue({
+          currentValue: '>= 0.0.1 < 0.0.4',
+          rangeStrategy: 'bump',
+          currentVersion: '0.0.4',
+          newVersion: '0.0.5',
+        })
+      ).toEqual('>= 0.0.5 < 0.0.6');
+      expect(
+        semver.getNewValue({
+          currentValue: '>= 0.0.1 < 1',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.0.1',
+        })
+      ).toEqual('>= 1.0.1 < 2');
+      expect(
+        semver.getNewValue({
+          currentValue: '>= 0.0.1 < 1',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.0.1',
+        })
+      ).toEqual('>= 1.0.1 < 2');
+    });
+    it('widens', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '<=1.2.3',
+          rangeStrategy: 'widen',
+          currentVersion: '1.0.0',
+          newVersion: '1.2.3',
+        })
+      ).toEqual('<=1.2.3');
+      expect(
+        semver.getNewValue({
+          currentValue: '<=1.2.3',
+          rangeStrategy: 'widen',
+          currentVersion: '1.0.0',
+          newVersion: '1.2.4',
+        })
+      ).toEqual('<=1.2.4');
+      expect(
+        semver.getNewValue({
+          currentValue: '>=1.2.3',
+          rangeStrategy: 'widen',
+          currentVersion: '1.0.0',
+          newVersion: '1.2.3',
+        })
+      ).toEqual('>=1.2.3');
+      expect(
+        semver.getNewValue({
+          currentValue: '>=1.2.3',
+          rangeStrategy: 'widen',
+          currentVersion: '1.0.0',
+          newVersion: '1.2.1',
+        })
+      ).toEqual('>=1.2.3 || 1.2.1');
     });
-  });
-  it('supports tilde greater than', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '~> 1.0.0',
-        rangeStrategy: 'replace',
-        currentVersion: '1.0.0',
-        newVersion: '1.1.7',
-      })
-    ).toEqual('~> 1.1.0');
-  });
-  it('bumps short caret to new', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^1.0',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.1.7',
-      })
-    ).toEqual('^1.1');
-  });
-  it('bumps short tilde', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '~1.0',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.1.7',
-      })
-    ).toEqual('~1.1');
-  });
-  it('bumps tilde to prerelease', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '~1.0',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.0.7-prerelease.1',
-      })
-    ).toEqual('~1.0.7-prerelease.1');
-  });
-  it('updates naked caret', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '^1',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '2.1.7',
-      })
-    ).toEqual('^2');
-  });
-  it('bumps naked tilde', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '~1',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.1.7',
-      })
-    ).toEqual('~1');
-  });
-  it('bumps naked major', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '5',
-        rangeStrategy: 'bump',
-        currentVersion: '5.0.0',
-        newVersion: '5.1.7',
-      })
-    ).toEqual('5');
-    expect(
-      semver.getNewValue({
-        currentValue: '5',
-        rangeStrategy: 'bump',
-        currentVersion: '5.0.0',
-        newVersion: '6.1.7',
-      })
-    ).toEqual('6');
-  });
-  it('bumps naked minor', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '5.0',
-        rangeStrategy: 'bump',
-        currentVersion: '5.0.0',
-        newVersion: '5.0.7',
-      })
-    ).toEqual('5.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '5.0',
-        rangeStrategy: 'bump',
-        currentVersion: '5.0.0',
-        newVersion: '5.1.7',
-      })
-    ).toEqual('5.1');
-    expect(
-      semver.getNewValue({
-        currentValue: '5.0',
-        rangeStrategy: 'bump',
-        currentVersion: '5.0.0',
-        newVersion: '6.1.7',
-      })
-    ).toEqual('6.1');
-  });
-  it('bumps greater or equals', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '>=1.0.0',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.1.0',
-      })
-    ).toEqual('>=1.1.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '>= 1.0.0',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.1.0',
-      })
-    ).toEqual('>= 1.1.0');
-  });
-  it('replaces equals', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '=1.0.0',
-        rangeStrategy: 'replace',
-        currentVersion: '1.0.0',
-        newVersion: '1.1.0',
-      })
-    ).toEqual('=1.1.0');
-  });
-  it('handles long asterisk', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '1.0.*',
-        rangeStrategy: 'replace',
-        currentVersion: '1.0.0',
-        newVersion: '1.1.0',
-      })
-    ).toEqual('1.1.*');
-  });
-  it('handles short asterisk', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '1.*',
-        rangeStrategy: 'replace',
-        currentVersion: '1.0.0',
-        newVersion: '2.1.0',
-      })
-    ).toEqual('2.*');
-  });
-  it('handles updating from stable to unstable', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '~0.6.1',
-        rangeStrategy: 'replace',
-        currentVersion: '0.6.8',
-        newVersion: '0.7.0-rc.2',
-      })
-    ).toEqual('~0.7.0-rc');
-  });
-  it('bumps complex ranges', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '>= 0.1.21 < 0.2.0',
-        rangeStrategy: 'bump',
-        currentVersion: '0.1.21',
-        newVersion: '0.1.24',
-      })
-    ).toEqual('>= 0.1.24 < 0.2.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '>= 0.1.21 <= 0.2.0',
-        rangeStrategy: 'bump',
-        currentVersion: '0.1.21',
-        newVersion: '0.1.24',
-      })
-    ).toEqual('>= 0.1.24 <= 0.2.0');
-    expect(
-      semver.getNewValue({
-        currentValue: '>= 0.0.1 <= 0.1',
-        rangeStrategy: 'bump',
-        currentVersion: '0.0.1',
-        newVersion: '0.0.2',
-      })
-    ).toEqual('>= 0.0.2 <= 0.1');
-    expect(
-      semver.getNewValue({
-        currentValue: '>= 0.0.1 < 0.1',
-        rangeStrategy: 'bump',
-        currentVersion: '0.1.0',
-        newVersion: '0.2.1',
-      })
-    ).toEqual('>= 0.2.1 < 0.3');
-    expect(
-      semver.getNewValue({
-        currentValue: '>= 0.0.1 < 0.0.4',
-        rangeStrategy: 'bump',
-        currentVersion: '0.0.4',
-        newVersion: '0.0.5',
-      })
-    ).toEqual('>= 0.0.5 < 0.0.6');
-    expect(
-      semver.getNewValue({
-        currentValue: '>= 0.0.1 < 1',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.0.1',
-      })
-    ).toEqual('>= 1.0.1 < 2');
-    expect(
-      semver.getNewValue({
-        currentValue: '>= 0.0.1 < 1',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.0.1',
-      })
-    ).toEqual('>= 1.0.1 < 2');
-  });
-  it('widens', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '<=1.2.3',
-        rangeStrategy: 'widen',
-        currentVersion: '1.0.0',
-        newVersion: '1.2.3',
-      })
-    ).toEqual('<=1.2.3');
-    expect(
-      semver.getNewValue({
-        currentValue: '<=1.2.3',
-        rangeStrategy: 'widen',
-        currentVersion: '1.0.0',
-        newVersion: '1.2.4',
-      })
-    ).toEqual('<=1.2.4');
-    expect(
-      semver.getNewValue({
-        currentValue: '>=1.2.3',
-        rangeStrategy: 'widen',
-        currentVersion: '1.0.0',
-        newVersion: '1.2.3',
-      })
-    ).toEqual('>=1.2.3');
-    expect(
-      semver.getNewValue({
-        currentValue: '>=1.2.3',
-        rangeStrategy: 'widen',
-        currentVersion: '1.0.0',
-        newVersion: '1.2.1',
-      })
-    ).toEqual('>=1.2.3 || 1.2.1');
   });
 });
diff --git a/lib/versioning/nuget/__snapshots__/index.spec.ts.snap b/lib/versioning/nuget/__snapshots__/index.spec.ts.snap
index a78168333d..ee47b71862 100644
--- a/lib/versioning/nuget/__snapshots__/index.spec.ts.snap
+++ b/lib/versioning/nuget/__snapshots__/index.spec.ts.snap
@@ -1,49 +1,49 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`nuget. isStable 1.0.0+c30d7625 1`] = `true`;
+exports[`versioning/nuget/index isStable 1.0.0+c30d7625 1`] = `true`;
 
-exports[`nuget. isStable 1.2019.3.22 1`] = `true`;
+exports[`versioning/nuget/index isStable 1.2019.3.22 1`] = `true`;
 
-exports[`nuget. isStable 2.0.2-pre20191018090318 1`] = `false`;
+exports[`versioning/nuget/index isStable 2.0.2-pre20191018090318 1`] = `false`;
 
-exports[`nuget. isStable 2.3.4-beta+1990ef74 1`] = `false`;
+exports[`versioning/nuget/index isStable 2.3.4-beta+1990ef74 1`] = `false`;
 
-exports[`nuget. isStable 3.0.0-beta 1`] = `false`;
+exports[`versioning/nuget/index isStable 3.0.0-beta 1`] = `false`;
 
-exports[`nuget. isStable 9.0.3 1`] = `true`;
+exports[`versioning/nuget/index isStable 9.0.3 1`] = `true`;
 
-exports[`nuget. isVersion and isValid 1.0.0+c30d7625 1`] = `"1.0.0+c30d7625"`;
+exports[`versioning/nuget/index isVersion and isValid 1.0.0+c30d7625 1`] = `"1.0.0+c30d7625"`;
 
-exports[`nuget. isVersion and isValid 1.0.0+c30d7625 2`] = `"1.0.0+c30d7625"`;
+exports[`versioning/nuget/index isVersion and isValid 1.0.0+c30d7625 2`] = `"1.0.0+c30d7625"`;
 
-exports[`nuget. isVersion and isValid 1.2019.3.22 1`] = `"1.2019.3.22"`;
+exports[`versioning/nuget/index isVersion and isValid 1.2019.3.22 1`] = `"1.2019.3.22"`;
 
-exports[`nuget. isVersion and isValid 1.2019.3.22 2`] = `"1.2019.3.22"`;
+exports[`versioning/nuget/index isVersion and isValid 1.2019.3.22 2`] = `"1.2019.3.22"`;
 
-exports[`nuget. isVersion and isValid 2.0.2-pre20191018090318 1`] = `"2.0.2-pre20191018090318"`;
+exports[`versioning/nuget/index isVersion and isValid 2.0.2-pre20191018090318 1`] = `"2.0.2-pre20191018090318"`;
 
-exports[`nuget. isVersion and isValid 2.0.2-pre20191018090318 2`] = `"2.0.2-pre20191018090318"`;
+exports[`versioning/nuget/index isVersion and isValid 2.0.2-pre20191018090318 2`] = `"2.0.2-pre20191018090318"`;
 
-exports[`nuget. isVersion and isValid 2.3.4-beta+1990ef74 1`] = `"2.3.4-beta+1990ef74"`;
+exports[`versioning/nuget/index isVersion and isValid 2.3.4-beta+1990ef74 1`] = `"2.3.4-beta+1990ef74"`;
 
-exports[`nuget. isVersion and isValid 2.3.4-beta+1990ef74 2`] = `"2.3.4-beta+1990ef74"`;
+exports[`versioning/nuget/index isVersion and isValid 2.3.4-beta+1990ef74 2`] = `"2.3.4-beta+1990ef74"`;
 
-exports[`nuget. isVersion and isValid 3.0.0.beta 1`] = `null`;
+exports[`versioning/nuget/index isVersion and isValid 3.0.0.beta 1`] = `null`;
 
-exports[`nuget. isVersion and isValid 3.0.0.beta 2`] = `null`;
+exports[`versioning/nuget/index isVersion and isValid 3.0.0.beta 2`] = `null`;
 
-exports[`nuget. isVersion and isValid 3.0.0-beta 1`] = `"3.0.0-beta"`;
+exports[`versioning/nuget/index isVersion and isValid 3.0.0-beta 1`] = `"3.0.0-beta"`;
 
-exports[`nuget. isVersion and isValid 3.0.0-beta 2`] = `"3.0.0-beta"`;
+exports[`versioning/nuget/index isVersion and isValid 3.0.0-beta 2`] = `"3.0.0-beta"`;
 
-exports[`nuget. isVersion and isValid 5.1.2-+ 1`] = `null`;
+exports[`versioning/nuget/index isVersion and isValid 5.1.2-+ 1`] = `null`;
 
-exports[`nuget. isVersion and isValid 5.1.2-+ 2`] = `null`;
+exports[`versioning/nuget/index isVersion and isValid 5.1.2-+ 2`] = `null`;
 
-exports[`nuget. isVersion and isValid 9.0.3 1`] = `"9.0.3"`;
+exports[`versioning/nuget/index isVersion and isValid 9.0.3 1`] = `"9.0.3"`;
 
-exports[`nuget. isVersion and isValid 9.0.3 2`] = `"9.0.3"`;
+exports[`versioning/nuget/index isVersion and isValid 9.0.3 2`] = `"9.0.3"`;
 
-exports[`nuget. isVersion and isValid 17.04 1`] = `"17.04"`;
+exports[`versioning/nuget/index isVersion and isValid 17.04 1`] = `"17.04"`;
 
-exports[`nuget. isVersion and isValid 17.04 2`] = `"17.04"`;
+exports[`versioning/nuget/index isVersion and isValid 17.04 2`] = `"17.04"`;
diff --git a/lib/versioning/nuget/index.spec.ts b/lib/versioning/nuget/index.spec.ts
index 1fd0798dbf..c2f6bd2a39 100644
--- a/lib/versioning/nuget/index.spec.ts
+++ b/lib/versioning/nuget/index.spec.ts
@@ -1,6 +1,6 @@
 import nuget from '.';
 
-describe('nuget.', () => {
+describe('versioning/nuget/index', () => {
   describe('isVersion and isValid', () => {
     [
       '9.0.3',
diff --git a/lib/versioning/pep440/index.spec.ts b/lib/versioning/pep440/index.spec.ts
index 7e40db69c7..211c287b54 100644
--- a/lib/versioning/pep440/index.spec.ts
+++ b/lib/versioning/pep440/index.spec.ts
@@ -1,215 +1,217 @@
 import pep440 from '.';
 
-describe('pep440.isValid(input)', () => {
-  it('should support a version without equals', () => {
-    expect(pep440.isValid('0.750')).toBeTruthy();
-    expect(pep440.isValid('1.2.3')).toBeTruthy();
-    expect(pep440.isValid('1.9')).toBeTruthy();
-  });
-  it('should support irregular versions', () => {
-    expect(pep440.isValid('17.04.0')).toBeTruthy();
-  });
-  it('should support simple pep440', () => {
-    expect(pep440.isValid('==1.2.3')).toBeTruthy();
-  });
-  it('should support pep440 with RC', () => {
-    expect(pep440.isValid('==1.2.3rc0')).toBeTruthy();
-  });
-  it('should support ranges', () => {
-    expect(pep440.isValid('~=1.2.3')).toBeTruthy();
-    expect(pep440.isValid('==1.2.*')).toBeTruthy();
-    expect(pep440.isValid('>1.2.3')).toBeTruthy();
-  });
-  it('should reject github repositories', () => {
-    expect(pep440.isValid('renovatebot/renovate')).toBeFalsy();
-    expect(pep440.isValid('renovatebot/renovate#master')).toBeFalsy();
-    expect(
-      pep440.isValid('https://github.com/renovatebot/renovate.git')
-    ).toBeFalsy();
+describe('versioning/pep440/index', () => {
+  describe('pep440.isValid(input)', () => {
+    it('should support a version without equals', () => {
+      expect(pep440.isValid('0.750')).toBeTruthy();
+      expect(pep440.isValid('1.2.3')).toBeTruthy();
+      expect(pep440.isValid('1.9')).toBeTruthy();
+    });
+    it('should support irregular versions', () => {
+      expect(pep440.isValid('17.04.0')).toBeTruthy();
+    });
+    it('should support simple pep440', () => {
+      expect(pep440.isValid('==1.2.3')).toBeTruthy();
+    });
+    it('should support pep440 with RC', () => {
+      expect(pep440.isValid('==1.2.3rc0')).toBeTruthy();
+    });
+    it('should support ranges', () => {
+      expect(pep440.isValid('~=1.2.3')).toBeTruthy();
+      expect(pep440.isValid('==1.2.*')).toBeTruthy();
+      expect(pep440.isValid('>1.2.3')).toBeTruthy();
+    });
+    it('should reject github repositories', () => {
+      expect(pep440.isValid('renovatebot/renovate')).toBeFalsy();
+      expect(pep440.isValid('renovatebot/renovate#master')).toBeFalsy();
+      expect(
+        pep440.isValid('https://github.com/renovatebot/renovate.git')
+      ).toBeFalsy();
+    });
   });
-});
 
-describe('pep440.isStable(version)', () => {
-  it('returns correct value', () => {
-    expect(pep440.isStable('1.2.3')).toBeTruthy();
-    expect(pep440.isStable('1.2.3rc0')).toBeFalsy();
-  });
-  it('returns false when version invalid', () => {
-    expect(pep440.isStable('not_version')).toBeFalsy();
+  describe('pep440.isStable(version)', () => {
+    it('returns correct value', () => {
+      expect(pep440.isStable('1.2.3')).toBeTruthy();
+      expect(pep440.isStable('1.2.3rc0')).toBeFalsy();
+    });
+    it('returns false when version invalid', () => {
+      expect(pep440.isStable('not_version')).toBeFalsy();
+    });
   });
-});
 
-describe('pep440.equals(version1, version2)', () => {
-  it('returns correct true', () => {
-    expect(pep440.equals('1.0', '1.0.0')).toBeTruthy();
-  });
-  it('returns false when version invalid', () => {
-    expect(pep440.equals('1.0.0', '1.0..foo')).toBeFalsy();
+  describe('pep440.equals(version1, version2)', () => {
+    it('returns correct true', () => {
+      expect(pep440.equals('1.0', '1.0.0')).toBeTruthy();
+    });
+    it('returns false when version invalid', () => {
+      expect(pep440.equals('1.0.0', '1.0..foo')).toBeFalsy();
+    });
   });
-});
 
-describe('pep440.isSingleVersion()', () => {
-  it('returns true if naked version', () => {
-    expect(pep440.isSingleVersion('1.2.3')).toBeTruthy();
-    expect(pep440.isSingleVersion('1.2.3rc0')).toBeTruthy();
-  });
-  it('returns true if double equals', () => {
-    expect(pep440.isSingleVersion('==1.2.3')).toBeTruthy();
-    expect(pep440.isSingleVersion('==1.2')).toBeTruthy();
-    expect(pep440.isSingleVersion('== 1.2.3')).toBeTruthy();
-  });
-  it('returns false when not version', () => {
-    expect(pep440.isSingleVersion('==1.*')).toBeFalsy();
+  describe('pep440.isSingleVersion()', () => {
+    it('returns true if naked version', () => {
+      expect(pep440.isSingleVersion('1.2.3')).toBeTruthy();
+      expect(pep440.isSingleVersion('1.2.3rc0')).toBeTruthy();
+    });
+    it('returns true if double equals', () => {
+      expect(pep440.isSingleVersion('==1.2.3')).toBeTruthy();
+      expect(pep440.isSingleVersion('==1.2')).toBeTruthy();
+      expect(pep440.isSingleVersion('== 1.2.3')).toBeTruthy();
+    });
+    it('returns false when not version', () => {
+      expect(pep440.isSingleVersion('==1.*')).toBeFalsy();
+    });
   });
-});
 
-const versions = [
-  '0.9.4',
-  '1.0.0',
-  '1.1.5',
-  '1.2.1',
-  '1.2.2',
-  '1.2.3',
-  '1.3.4',
-  '2.0.3',
-];
-
-describe('pep440.getSatisfyingVersion(versions, range)', () => {
-  it('returns correct value', () => {
-    expect(pep440.getSatisfyingVersion(versions, '~=1.2.1')).toBe('1.2.3');
-  });
-  it('returns null when none found', () => {
-    expect(pep440.getSatisfyingVersion(versions, '~=2.1')).toBeNull();
+  const versions = [
+    '0.9.4',
+    '1.0.0',
+    '1.1.5',
+    '1.2.1',
+    '1.2.2',
+    '1.2.3',
+    '1.3.4',
+    '2.0.3',
+  ];
+
+  describe('pep440.getSatisfyingVersion(versions, range)', () => {
+    it('returns correct value', () => {
+      expect(pep440.getSatisfyingVersion(versions, '~=1.2.1')).toBe('1.2.3');
+    });
+    it('returns null when none found', () => {
+      expect(pep440.getSatisfyingVersion(versions, '~=2.1')).toBeNull();
+    });
   });
-});
 
-describe('pep440.minSatisfyingVersion(versions, range)', () => {
-  it('returns correct value', () => {
-    expect(pep440.minSatisfyingVersion(versions, '~=1.2.1')).toBe('1.2.1');
-  });
-  it('returns null when none found', () => {
-    expect(pep440.minSatisfyingVersion(versions, '~=2.1')).toBeNull();
+  describe('pep440.minSatisfyingVersion(versions, range)', () => {
+    it('returns correct value', () => {
+      expect(pep440.minSatisfyingVersion(versions, '~=1.2.1')).toBe('1.2.1');
+    });
+    it('returns null when none found', () => {
+      expect(pep440.minSatisfyingVersion(versions, '~=2.1')).toBeNull();
+    });
   });
-});
 
-describe('pep440.getNewValue()', () => {
-  const { getNewValue } = pep440;
-
-  // cases: [currentValue, expectedBump]
-  [
-    // plain version
-    ['1.0.0', '1.2.3'],
-
-    // simple cases
-    ['==1.0.3', '==1.2.3'],
-    ['>=1.2.0', '>=1.2.3'],
-    ['~=1.2.0', '~=1.2.3'],
-    ['~=1.0.3', '~=1.2.3'],
-
-    // glob
-    ['==1.2.*', '==1.2.*'],
-    ['==1.0.*', '==1.2.*'],
-
-    // future versions guard
-    ['<1.2.2.3', '<1.2.4.0'],
-    ['<1.2.3', '<1.2.4'],
-    ['<1.2', '<1.3'],
-    ['<1', '<2'],
-    ['<2.0.0', '<2.0.0'],
-
-    // minimum version guard
-    ['>0.9.8', '>0.9.8'],
-    // rollback
-    ['>2.0.0', '>=1.2.3'],
-    ['>=2.0.0', '>=1.2.3'],
-
-    // complex ranges
-    ['~=1.1.0, !=1.1.1', '~=1.2.3, !=1.1.1'],
-    ['~=1.1.0,!=1.1.1', '~=1.2.3,!=1.1.1'],
-
-    // invalid & not supported
-    [' ', ' '],
-    ['invalid', null],
-    ['===1.0.3', null],
-    // impossible
-    ['!=1.2.3', null],
-  ].forEach(([currentValue, expectedBump]) => {
-    const bumped = getNewValue({
-      currentValue,
-      rangeStrategy: 'bump',
-      currentVersion: '1.0.0',
-      newVersion: '1.2.3',
-    });
-    it(`bumps '${currentValue}' to '${expectedBump}'`, () => {
-      expect(bumped).toBe(expectedBump);
-    });
-
-    const replaced = getNewValue({
-      currentValue,
-      rangeStrategy: 'replace',
-      currentVersion: '1.0.0',
-      newVersion: '1.2.3',
-    });
-    const needReplace = pep440.matches('1.2.3', currentValue);
-    const expectedReplace = needReplace ? currentValue : bumped;
-    it(`replaces '${currentValue}' to '${expectedReplace}'`, () => {
-      expect(replaced).toBe(expectedReplace);
-    });
-
-    const pinned = getNewValue({
-      currentValue,
-      rangeStrategy: 'pin',
-      currentVersion: '1.0.0',
-      newVersion: '1.2.3',
-    });
-    const expectedPin = '==1.2.3';
-    it(`pins '${currentValue}' to '${expectedPin}'`, () => {
-      expect(pinned).toBe(expectedPin);
+  describe('pep440.getNewValue()', () => {
+    const { getNewValue } = pep440;
+
+    // cases: [currentValue, expectedBump]
+    [
+      // plain version
+      ['1.0.0', '1.2.3'],
+
+      // simple cases
+      ['==1.0.3', '==1.2.3'],
+      ['>=1.2.0', '>=1.2.3'],
+      ['~=1.2.0', '~=1.2.3'],
+      ['~=1.0.3', '~=1.2.3'],
+
+      // glob
+      ['==1.2.*', '==1.2.*'],
+      ['==1.0.*', '==1.2.*'],
+
+      // future versions guard
+      ['<1.2.2.3', '<1.2.4.0'],
+      ['<1.2.3', '<1.2.4'],
+      ['<1.2', '<1.3'],
+      ['<1', '<2'],
+      ['<2.0.0', '<2.0.0'],
+
+      // minimum version guard
+      ['>0.9.8', '>0.9.8'],
+      // rollback
+      ['>2.0.0', '>=1.2.3'],
+      ['>=2.0.0', '>=1.2.3'],
+
+      // complex ranges
+      ['~=1.1.0, !=1.1.1', '~=1.2.3, !=1.1.1'],
+      ['~=1.1.0,!=1.1.1', '~=1.2.3,!=1.1.1'],
+
+      // invalid & not supported
+      [' ', ' '],
+      ['invalid', null],
+      ['===1.0.3', null],
+      // impossible
+      ['!=1.2.3', null],
+    ].forEach(([currentValue, expectedBump]) => {
+      const bumped = getNewValue({
+        currentValue,
+        rangeStrategy: 'bump',
+        currentVersion: '1.0.0',
+        newVersion: '1.2.3',
+      });
+      it(`bumps '${currentValue}' to '${expectedBump}'`, () => {
+        expect(bumped).toBe(expectedBump);
+      });
+
+      const replaced = getNewValue({
+        currentValue,
+        rangeStrategy: 'replace',
+        currentVersion: '1.0.0',
+        newVersion: '1.2.3',
+      });
+      const needReplace = pep440.matches('1.2.3', currentValue);
+      const expectedReplace = needReplace ? currentValue : bumped;
+      it(`replaces '${currentValue}' to '${expectedReplace}'`, () => {
+        expect(replaced).toBe(expectedReplace);
+      });
+
+      const pinned = getNewValue({
+        currentValue,
+        rangeStrategy: 'pin',
+        currentVersion: '1.0.0',
+        newVersion: '1.2.3',
+      });
+      const expectedPin = '==1.2.3';
+      it(`pins '${currentValue}' to '${expectedPin}'`, () => {
+        expect(pinned).toBe(expectedPin);
+      });
     });
-  });
 
-  it('guards against unsupported rangeStrategy', () => {
-    const invalid = getNewValue({
-      currentValue: '==1.0.0',
-      rangeStrategy: 'update-lockfile',
-      currentVersion: '1.0.0',
-      newVersion: '1.2.3',
+    it('guards against unsupported rangeStrategy', () => {
+      const invalid = getNewValue({
+        currentValue: '==1.0.0',
+        rangeStrategy: 'update-lockfile',
+        currentVersion: '1.0.0',
+        newVersion: '1.2.3',
+      });
+      expect(invalid).toEqual('==1.2.3');
     });
-    expect(invalid).toEqual('==1.2.3');
   });
-});
 
-describe('pep.isLessThanRange()', () => {
-  test.each([
-    ['>= 1.0.0, < 2.0.0', '0.9.9.9', true],
-    ['>= 1.0.0, < 2.0.0', '1.0.0a0', true],
-
-    ['> 1.0.0, < 2.0.0', '1.0.0.0', true],
-    ['> 1.0.0, < 2.0.0', '2.0.1.0', false],
-    ['> 1.0.0, < 2.0.0', '2.0.0.0', false],
-    ['> 1.0.0, < 2.0.0', '2.0.0a0', false],
-
-    ['== 1.2.3', '1.2.2.9', true],
-    ['== 1.2.3', '1.2.3a0', true],
-    ['== 1.2.3', '1.2.3.0', false],
-    ['== 1.2.3', '1.2.3.1', false],
-    ['== 1.2.3', '1.2.4a0', false],
-
-    ['!= 1.2.3', '1.2.2.9', false],
-    ['!= 1.2.3', '1.2.3.0', false],
-    ['!= 1.2.3', '1.2.3.1', false],
-
-    ['< 1.0.0', '0.0.1', false],
-    ['< 1.0.0', '1.0.0', false],
-    ['< 1.0.0', '2.0.0', false],
-
-    ['<= 1.0.0', '0.0.1', false],
-    ['<= 1.0.0', '1.0.0', false],
-    ['<= 1.0.0', '2.0.0', false],
-
-    ['< 1.0.0, > 2.0.0', '0.0.1', true], // fixme (maybe)
-    ['< 1.0.0, > 2.0.0', '3.0.0', false],
-  ])(`%s\t%s\t%s`, (range, version, expected) => {
-    expect(pep440.isLessThanRange(version, range)).toBe(expected);
+  describe('pep.isLessThanRange()', () => {
+    test.each([
+      ['>= 1.0.0, < 2.0.0', '0.9.9.9', true],
+      ['>= 1.0.0, < 2.0.0', '1.0.0a0', true],
+
+      ['> 1.0.0, < 2.0.0', '1.0.0.0', true],
+      ['> 1.0.0, < 2.0.0', '2.0.1.0', false],
+      ['> 1.0.0, < 2.0.0', '2.0.0.0', false],
+      ['> 1.0.0, < 2.0.0', '2.0.0a0', false],
+
+      ['== 1.2.3', '1.2.2.9', true],
+      ['== 1.2.3', '1.2.3a0', true],
+      ['== 1.2.3', '1.2.3.0', false],
+      ['== 1.2.3', '1.2.3.1', false],
+      ['== 1.2.3', '1.2.4a0', false],
+
+      ['!= 1.2.3', '1.2.2.9', false],
+      ['!= 1.2.3', '1.2.3.0', false],
+      ['!= 1.2.3', '1.2.3.1', false],
+
+      ['< 1.0.0', '0.0.1', false],
+      ['< 1.0.0', '1.0.0', false],
+      ['< 1.0.0', '2.0.0', false],
+
+      ['<= 1.0.0', '0.0.1', false],
+      ['<= 1.0.0', '1.0.0', false],
+      ['<= 1.0.0', '2.0.0', false],
+
+      ['< 1.0.0, > 2.0.0', '0.0.1', true], // fixme (maybe)
+      ['< 1.0.0, > 2.0.0', '3.0.0', false],
+    ])(`%s\t%s\t%s`, (range, version, expected) => {
+      expect(pep440.isLessThanRange(version, range)).toBe(expected);
+    });
   });
 });
diff --git a/lib/versioning/poetry/index.spec.ts b/lib/versioning/poetry/index.spec.ts
index f204ba153e..3e702bc70c 100644
--- a/lib/versioning/poetry/index.spec.ts
+++ b/lib/versioning/poetry/index.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { api as versionig } from '.';
 
-describe(getName(), () => {
+describe('versioning/poetry/index', () => {
   describe('equals', () => {
     it.each([
       ['1', '1'],
diff --git a/lib/versioning/regex/index.spec.ts b/lib/versioning/regex/index.spec.ts
index 09c57ac1d3..b2cd786512 100644
--- a/lib/versioning/regex/index.spec.ts
+++ b/lib/versioning/regex/index.spec.ts
@@ -1,7 +1,7 @@
 import { VersioningApi, get } from '..';
 import { CONFIG_VALIDATION } from '../../constants/error-messages';
 
-describe('regex', () => {
+describe('versioning/regex/index', () => {
   const regex: VersioningApi = get(
     'regex:^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)(?<prerelease>[^.-]+)?(?:-(?<compatibility>.*))?$'
   );
diff --git a/lib/versioning/ruby/__snapshots__/index.spec.ts.snap b/lib/versioning/ruby/__snapshots__/index.spec.ts.snap
index b29379aaf5..ff84a3d593 100644
--- a/lib/versioning/ruby/__snapshots__/index.spec.ts.snap
+++ b/lib/versioning/ruby/__snapshots__/index.spec.ts.snap
@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`semverRuby .getNewValue does not error 1`] = `">= 3.2, < 6.0.2"`;
+exports[`versioning/ruby/index .getNewValue does not error 1`] = `">= 3.2, < 6.0.2"`;
diff --git a/lib/versioning/ruby/index.spec.ts b/lib/versioning/ruby/index.spec.ts
index 08af7c5bb4..ed0cfb358e 100644
--- a/lib/versioning/ruby/index.spec.ts
+++ b/lib/versioning/ruby/index.spec.ts
@@ -1,7 +1,7 @@
 import type { RangeStrategy } from '../../types';
 import { api as semverRuby } from '.';
 
-describe('semverRuby', () => {
+describe('versioning/ruby/index', () => {
   describe('.equals', () => {
     it('returns true when versions are equal', () => {
       expect(semverRuby.equals('1.0.0', '1')).toBe(true);
diff --git a/lib/versioning/semver/index.spec.ts b/lib/versioning/semver/index.spec.ts
index 434cf1b95b..eacb76892f 100644
--- a/lib/versioning/semver/index.spec.ts
+++ b/lib/versioning/semver/index.spec.ts
@@ -1,53 +1,55 @@
 import semver from '.';
 
-describe('semver.isValid(input)', () => {
-  it('should return null for irregular versions', () => {
-    expect(semver.isValid('17.04.0')).toBeFalsy();
-  });
-  it('should support simple semver', () => {
-    expect(semver.isValid('1.2.3')).toBeTruthy();
-  });
-  it('should support semver with dash', () => {
-    expect(semver.isValid('1.2.3-foo')).toBeTruthy();
-  });
-  it('should reject semver without dash', () => {
-    expect(semver.isValid('1.2.3foo')).toBeFalsy();
-  });
-  it('should reject ranges', () => {
-    expect(semver.isValid('~1.2.3')).toBeFalsy();
-    expect(semver.isValid('^1.2.3')).toBeFalsy();
-    expect(semver.isValid('>1.2.3')).toBeFalsy();
-  });
-  it('should reject github repositories', () => {
-    expect(semver.isValid('renovatebot/renovate')).toBeFalsy();
-    expect(semver.isValid('renovatebot/renovate#master')).toBeFalsy();
-    expect(
-      semver.isValid('https://github.com/renovatebot/renovate.git')
-    ).toBeFalsy();
-  });
-});
-describe('semver.isSingleVersion()', () => {
-  it('returns true if naked version', () => {
-    expect(semver.isSingleVersion('1.2.3')).toBeTruthy();
-    expect(semver.isSingleVersion('1.2.3-alpha.1')).toBeTruthy();
-  });
-  it('returns false if equals', () => {
-    expect(semver.isSingleVersion('=1.2.3')).toBeFalsy();
-    expect(semver.isSingleVersion('= 1.2.3')).toBeFalsy();
-  });
-  it('returns false when not version', () => {
-    expect(semver.isSingleVersion('1.x')).toBeFalsy();
-  });
-});
-describe('semver.getNewValue()', () => {
-  it('uses newVersion', () => {
-    expect(
-      semver.getNewValue({
-        currentValue: '=1.0.0',
-        rangeStrategy: 'bump',
-        currentVersion: '1.0.0',
-        newVersion: '1.1.0',
-      })
-    ).toEqual('1.1.0');
+describe('versioning/semver/index', () => {
+  describe('semver.isValid(input)', () => {
+    it('should return null for irregular versions', () => {
+      expect(semver.isValid('17.04.0')).toBeFalsy();
+    });
+    it('should support simple semver', () => {
+      expect(semver.isValid('1.2.3')).toBeTruthy();
+    });
+    it('should support semver with dash', () => {
+      expect(semver.isValid('1.2.3-foo')).toBeTruthy();
+    });
+    it('should reject semver without dash', () => {
+      expect(semver.isValid('1.2.3foo')).toBeFalsy();
+    });
+    it('should reject ranges', () => {
+      expect(semver.isValid('~1.2.3')).toBeFalsy();
+      expect(semver.isValid('^1.2.3')).toBeFalsy();
+      expect(semver.isValid('>1.2.3')).toBeFalsy();
+    });
+    it('should reject github repositories', () => {
+      expect(semver.isValid('renovatebot/renovate')).toBeFalsy();
+      expect(semver.isValid('renovatebot/renovate#master')).toBeFalsy();
+      expect(
+        semver.isValid('https://github.com/renovatebot/renovate.git')
+      ).toBeFalsy();
+    });
+  });
+  describe('semver.isSingleVersion()', () => {
+    it('returns true if naked version', () => {
+      expect(semver.isSingleVersion('1.2.3')).toBeTruthy();
+      expect(semver.isSingleVersion('1.2.3-alpha.1')).toBeTruthy();
+    });
+    it('returns false if equals', () => {
+      expect(semver.isSingleVersion('=1.2.3')).toBeFalsy();
+      expect(semver.isSingleVersion('= 1.2.3')).toBeFalsy();
+    });
+    it('returns false when not version', () => {
+      expect(semver.isSingleVersion('1.x')).toBeFalsy();
+    });
+  });
+  describe('semver.getNewValue()', () => {
+    it('uses newVersion', () => {
+      expect(
+        semver.getNewValue({
+          currentValue: '=1.0.0',
+          rangeStrategy: 'bump',
+          currentVersion: '1.0.0',
+          newVersion: '1.1.0',
+        })
+      ).toEqual('1.1.0');
+    });
   });
 });
diff --git a/lib/versioning/swift/index.spec.ts b/lib/versioning/swift/index.spec.ts
index 483374e7ca..f5503a2e21 100644
--- a/lib/versioning/swift/index.spec.ts
+++ b/lib/versioning/swift/index.spec.ts
@@ -11,102 +11,106 @@ const {
   matches,
 } = swift;
 
-describe('isValid(input)', () => {
-  it('supports isVersion', () => {
-    expect(isVersion('from: "1.2.3"')).toBe(false);
-    expect(isVersion('1.2.3')).toBe(true);
-  });
-  it('understands Swift version ranges', () => {
-    expect(isValid('from: "1.2.3"')).toBe(true);
-    expect(isValid('from : "1.2.3"')).toBe(true);
-    expect(isValid('from:"1.2.3"')).toBe(true);
-    expect(isValid(' from:"1.2.3" ')).toBe(true);
-    expect(isValid(' from : "1.2.3" ')).toBe(true);
+describe('versioning/swift/index', () => {
+  describe('isValid(input)', () => {
+    it('supports isVersion', () => {
+      expect(isVersion('from: "1.2.3"')).toBe(false);
+      expect(isVersion('1.2.3')).toBe(true);
+    });
+    it('understands Swift version ranges', () => {
+      expect(isValid('from: "1.2.3"')).toBe(true);
+      expect(isValid('from : "1.2.3"')).toBe(true);
+      expect(isValid('from:"1.2.3"')).toBe(true);
+      expect(isValid(' from:"1.2.3" ')).toBe(true);
+      expect(isValid(' from : "1.2.3" ')).toBe(true);
 
-    expect(isValid('"1.2.3"..."1.2.4"')).toBe(true);
-    expect(isValid(' "1.2.3" ... "1.2.4" ')).toBe(true);
+      expect(isValid('"1.2.3"..."1.2.4"')).toBe(true);
+      expect(isValid(' "1.2.3" ... "1.2.4" ')).toBe(true);
 
-    expect(isValid('"1.2.3"...')).toBe(true);
-    expect(isValid(' "1.2.3" ... ')).toBe(true);
+      expect(isValid('"1.2.3"...')).toBe(true);
+      expect(isValid(' "1.2.3" ... ')).toBe(true);
 
-    expect(isValid('..."1.2.4"')).toBe(true);
-    expect(isValid(' ... "1.2.4" ')).toBe(true);
+      expect(isValid('..."1.2.4"')).toBe(true);
+      expect(isValid(' ... "1.2.4" ')).toBe(true);
 
-    expect(isValid('"1.2.3"..<"1.2.4"')).toBe(true);
-    expect(isValid(' "1.2.3" ..< "1.2.4" ')).toBe(true);
+      expect(isValid('"1.2.3"..<"1.2.4"')).toBe(true);
+      expect(isValid(' "1.2.3" ..< "1.2.4" ')).toBe(true);
 
-    expect(isValid('..<"1.2.4"')).toBe(true);
-    expect(isValid(' ..< "1.2.4" ')).toBe(true);
-  });
-  it('should return null for irregular versions', () => {
-    expect(isValid('17.04.0')).toBeFalsy();
-  });
-  it('should support simple semver', () => {
-    expect(isValid('1.2.3')).toBe(true);
-    expect(isValid('v1.2.3')).toBe(true);
-  });
-  it('should support semver with dash', () => {
-    expect(isValid('1.2.3-foo')).toBe(true);
-  });
-  it('should reject semver without dash', () => {
-    expect(isValid('1.2.3foo')).toBeFalsy();
-  });
-  it('should support ranges', () => {
-    expect(isValid('~1.2.3')).toBeFalsy();
-    expect(isValid('^1.2.3')).toBeFalsy();
-    expect(isValid('from: "1.2.3"')).toBe(true);
-    expect(isValid('"1.2.3"..."1.2.4"')).toBe(true);
-    expect(isValid('"1.2.3"..."1.2.4"')).toBe(true);
-    expect(isValid('"1.2.3"..<"1.2.4"')).toBe(true);
-    expect(isValid('"1.2.3"..<"1.2.4"')).toBe(true);
-    expect(isValid('..."1.2.3"')).toBe(true);
-    expect(isValid('..<"1.2.4"')).toBe(true);
-    expect(
-      minSatisfyingVersion(['1.2.3', '1.2.4', '1.2.5'], '..<"1.2.4"')
-    ).toBe('1.2.3');
-    expect(
-      minSatisfyingVersion(['v1.2.3', 'v1.2.4', 'v1.2.5'], '..<"1.2.4"')
-    ).toBe('1.2.3');
-    expect(
-      getSatisfyingVersion(['1.2.3', '1.2.4', '1.2.5'], '..<"1.2.4"')
-    ).toBe('1.2.3');
-    expect(
-      getSatisfyingVersion(['v1.2.3', 'v1.2.4', 'v1.2.5'], '..<"1.2.4"')
-    ).toBe('1.2.3');
-    expect(
-      getSatisfyingVersion(['1.2.3', '1.2.4', '1.2.5'], '..."1.2.4"')
-    ).toBe('1.2.4');
-    expect(isLessThanRange('1.2.3', '..."1.2.4"')).toBe(false);
-    expect(isLessThanRange('v1.2.3', '..."1.2.4"')).toBe(false);
-    expect(isLessThanRange('1.2.3', '"1.2.4"...')).toBe(true);
-    expect(isLessThanRange('v1.2.3', '"1.2.4"...')).toBe(true);
+      expect(isValid('..<"1.2.4"')).toBe(true);
+      expect(isValid(' ..< "1.2.4" ')).toBe(true);
+    });
+    it('should return null for irregular versions', () => {
+      expect(isValid('17.04.0')).toBeFalsy();
+    });
+    it('should support simple semver', () => {
+      expect(isValid('1.2.3')).toBe(true);
+      expect(isValid('v1.2.3')).toBe(true);
+    });
+    it('should support semver with dash', () => {
+      expect(isValid('1.2.3-foo')).toBe(true);
+    });
+    it('should reject semver without dash', () => {
+      expect(isValid('1.2.3foo')).toBeFalsy();
+    });
+    it('should support ranges', () => {
+      expect(isValid('~1.2.3')).toBeFalsy();
+      expect(isValid('^1.2.3')).toBeFalsy();
+      expect(isValid('from: "1.2.3"')).toBe(true);
+      expect(isValid('"1.2.3"..."1.2.4"')).toBe(true);
+      expect(isValid('"1.2.3"..."1.2.4"')).toBe(true);
+      expect(isValid('"1.2.3"..<"1.2.4"')).toBe(true);
+      expect(isValid('"1.2.3"..<"1.2.4"')).toBe(true);
+      expect(isValid('..."1.2.3"')).toBe(true);
+      expect(isValid('..<"1.2.4"')).toBe(true);
+      expect(
+        minSatisfyingVersion(['1.2.3', '1.2.4', '1.2.5'], '..<"1.2.4"')
+      ).toBe('1.2.3');
+      expect(
+        minSatisfyingVersion(['v1.2.3', 'v1.2.4', 'v1.2.5'], '..<"1.2.4"')
+      ).toBe('1.2.3');
+      expect(
+        getSatisfyingVersion(['1.2.3', '1.2.4', '1.2.5'], '..<"1.2.4"')
+      ).toBe('1.2.3');
+      expect(
+        getSatisfyingVersion(['v1.2.3', 'v1.2.4', 'v1.2.5'], '..<"1.2.4"')
+      ).toBe('1.2.3');
+      expect(
+        getSatisfyingVersion(['1.2.3', '1.2.4', '1.2.5'], '..."1.2.4"')
+      ).toBe('1.2.4');
+      expect(isLessThanRange('1.2.3', '..."1.2.4"')).toBe(false);
+      expect(isLessThanRange('v1.2.3', '..."1.2.4"')).toBe(false);
+      expect(isLessThanRange('1.2.3', '"1.2.4"...')).toBe(true);
+      expect(isLessThanRange('v1.2.3', '"1.2.4"...')).toBe(true);
 
-    expect(matches('1.2.4', '..."1.2.4"')).toBe(true);
-    expect(matches('v1.2.4', '..."1.2.4"')).toBe(true);
-    expect(matches('1.2.4', '..."1.2.3"')).toBe(false);
-    expect(matches('v1.2.4', '..."1.2.3"')).toBe(false);
+      expect(matches('1.2.4', '..."1.2.4"')).toBe(true);
+      expect(matches('v1.2.4', '..."1.2.4"')).toBe(true);
+      expect(matches('1.2.4', '..."1.2.3"')).toBe(false);
+      expect(matches('v1.2.4', '..."1.2.3"')).toBe(false);
+    });
   });
-});
-describe('getNewValue()', () => {
-  it('supports range update', () => {
-    [
-      ['1.2.3', 'auto', '1.2.3', '1.2.4', '1.2.3'],
-      ['v1.2.3', 'auto', 'v1.2.3', 'v1.2.4', 'v1.2.3'],
-      ['from: "1.2.3"', 'auto', '1.2.3', '1.2.4', 'from: "1.2.4"'],
-      ['from: "1.2.2"', 'auto', '1.2.3', '1.2.4', 'from: "1.2.4"'],
-      ['"1.2.3"...', 'auto', '1.2.3', '1.2.4', '"1.2.4"...'],
-      ['"1.2.3"..."1.2.4"', 'auto', '1.2.3', '1.2.5', '"1.2.3"..."1.2.5"'],
-      ['"1.2.3"..<"1.2.4"', 'auto', '1.2.3', '1.2.5', '"1.2.3"..<"1.2.5"'],
-      ['..."1.2.4"', 'auto', '1.2.3', '1.2.5', '..."1.2.5"'],
-      ['..<"1.2.4"', 'auto', '1.2.3', '1.2.5', '..<"1.2.5"'],
-    ].forEach(([range, rangeStrategy, currentVersion, newVersion, result]) => {
-      const newValue = getNewValue({
-        currentValue: range,
-        rangeStrategy: rangeStrategy as RangeStrategy,
-        currentVersion,
-        newVersion,
-      });
-      expect(newValue).toEqual(result);
+  describe('getNewValue()', () => {
+    it('supports range update', () => {
+      [
+        ['1.2.3', 'auto', '1.2.3', '1.2.4', '1.2.3'],
+        ['v1.2.3', 'auto', 'v1.2.3', 'v1.2.4', 'v1.2.3'],
+        ['from: "1.2.3"', 'auto', '1.2.3', '1.2.4', 'from: "1.2.4"'],
+        ['from: "1.2.2"', 'auto', '1.2.3', '1.2.4', 'from: "1.2.4"'],
+        ['"1.2.3"...', 'auto', '1.2.3', '1.2.4', '"1.2.4"...'],
+        ['"1.2.3"..."1.2.4"', 'auto', '1.2.3', '1.2.5', '"1.2.3"..."1.2.5"'],
+        ['"1.2.3"..<"1.2.4"', 'auto', '1.2.3', '1.2.5', '"1.2.3"..<"1.2.5"'],
+        ['..."1.2.4"', 'auto', '1.2.3', '1.2.5', '..."1.2.5"'],
+        ['..<"1.2.4"', 'auto', '1.2.3', '1.2.5', '..<"1.2.5"'],
+      ].forEach(
+        ([range, rangeStrategy, currentVersion, newVersion, result]) => {
+          const newValue = getNewValue({
+            currentValue: range,
+            rangeStrategy: rangeStrategy as RangeStrategy,
+            currentVersion,
+            newVersion,
+          });
+          expect(newValue).toEqual(result);
+        }
+      );
     });
   });
 });
diff --git a/lib/versioning/ubuntu/index.spec.ts b/lib/versioning/ubuntu/index.spec.ts
index 277859e3d7..f9f8d774fa 100644
--- a/lib/versioning/ubuntu/index.spec.ts
+++ b/lib/versioning/ubuntu/index.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../test/util';
 import { api as ubuntu } from '.';
 
-describe(getName(), () => {
+describe('versioning/ubuntu/index', () => {
   // validation
 
   it('isValid', () => {
diff --git a/lib/versioning/versioning-metadata.spec.ts b/lib/versioning/versioning-metadata.spec.ts
index 38d0b26e73..371d9abadf 100644
--- a/lib/versioning/versioning-metadata.spec.ts
+++ b/lib/versioning/versioning-metadata.spec.ts
@@ -1,6 +1,6 @@
 import { readFile, readdir } from 'fs-extra';
 
-describe('versioning metadata', () => {
+describe('versioning/versioning-metadata', () => {
   it('readme no markdown headers', async () => {
     const allVersioning = (await readdir('lib/versioning')).filter(
       (item) => !item.includes('.')
diff --git a/lib/workers/branch/auto-replace.spec.ts b/lib/workers/branch/auto-replace.spec.ts
index 8eaccfdeee..99faf7b5ab 100644
--- a/lib/workers/branch/auto-replace.spec.ts
+++ b/lib/workers/branch/auto-replace.spec.ts
@@ -1,4 +1,4 @@
-import { defaultConfig, getName, loadFixture } from '../../../test/util';
+import { defaultConfig, loadFixture } from '../../../test/util';
 import { WORKER_FILE_UPDATE_FAILED } from '../../constants/error-messages';
 import { extractPackageFile } from '../../manager/html';
 import type { BranchUpgradeConfig } from '../types';
@@ -8,7 +8,7 @@ const sampleHtml = loadFixture('sample.html', `../../manager/html`);
 
 jest.mock('../../util/fs');
 
-describe(getName(), () => {
+describe('workers/branch/auto-replace', () => {
   describe('doAutoReplace', () => {
     let reuseExistingBranch: boolean;
     let upgrade: BranchUpgradeConfig;
diff --git a/lib/workers/branch/automerge.spec.ts b/lib/workers/branch/automerge.spec.ts
index e62d94f194..9b6439f4fe 100644
--- a/lib/workers/branch/automerge.spec.ts
+++ b/lib/workers/branch/automerge.spec.ts
@@ -1,4 +1,4 @@
-import { defaultConfig, getName, git, platform } from '../../../test/util';
+import { defaultConfig, git, platform } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { RenovateConfig } from '../../config/types';
 import { BranchStatus } from '../../types';
@@ -6,7 +6,7 @@ import { tryBranchAutomerge } from './automerge';
 
 jest.mock('../../util/git');
 
-describe(getName(), () => {
+describe('workers/branch/automerge', () => {
   describe('tryBranchAutomerge', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/branch/check-existing.spec.ts b/lib/workers/branch/check-existing.spec.ts
index e20ca7d336..8149ac4f40 100644
--- a/lib/workers/branch/check-existing.spec.ts
+++ b/lib/workers/branch/check-existing.spec.ts
@@ -1,9 +1,9 @@
-import { defaultConfig, getName, partial, platform } from '../../../test/util';
+import { defaultConfig, partial, platform } from '../../../test/util';
 import { PrState } from '../../types';
 import type { BranchConfig } from '../types';
 import { prAlreadyExisted } from './check-existing';
 
-describe(getName(), () => {
+describe('workers/branch/check-existing', () => {
   describe('prAlreadyExisted', () => {
     let config: BranchConfig;
     beforeEach(() => {
diff --git a/lib/workers/branch/commit.spec.ts b/lib/workers/branch/commit.spec.ts
index 7c5593b0ee..3062c17bba 100644
--- a/lib/workers/branch/commit.spec.ts
+++ b/lib/workers/branch/commit.spec.ts
@@ -1,11 +1,11 @@
-import { defaultConfig, getName, git, partial } from '../../../test/util';
+import { defaultConfig, git, partial } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { BranchConfig } from '../types';
 import { commitFilesToBranch } from './commit';
 
 jest.mock('../../util/git');
 
-describe(getName(), () => {
+describe('workers/branch/commit', () => {
   describe('commitFilesToBranch', () => {
     let config: BranchConfig;
     beforeEach(() => {
diff --git a/lib/workers/branch/get-updated.spec.ts b/lib/workers/branch/get-updated.spec.ts
index 406d82e308..fd084c5456 100644
--- a/lib/workers/branch/get-updated.spec.ts
+++ b/lib/workers/branch/get-updated.spec.ts
@@ -1,4 +1,4 @@
-import { defaultConfig, getName, git, mocked } from '../../../test/util';
+import { defaultConfig, git, mocked } from '../../../test/util';
 import * as datasourceGitRefs from '../../datasource/git-refs';
 import * as _composer from '../../manager/composer';
 import * as _gitSubmodules from '../../manager/git-submodules';
@@ -21,7 +21,7 @@ jest.mock('../../manager/git-submodules');
 jest.mock('../../util/git');
 jest.mock('./auto-replace');
 
-describe(getName(), () => {
+describe('workers/branch/get-updated', () => {
   describe('getUpdatedPackageFiles()', () => {
     let config: BranchConfig;
     beforeEach(() => {
diff --git a/lib/workers/branch/index.spec.ts b/lib/workers/branch/index.spec.ts
index 61a75d1e18..3e4697fea2 100644
--- a/lib/workers/branch/index.spec.ts
+++ b/lib/workers/branch/index.spec.ts
@@ -1,11 +1,5 @@
 import * as _fs from 'fs-extra';
-import {
-  defaultConfig,
-  getName,
-  git,
-  mocked,
-  platform,
-} from '../../../test/util';
+import { defaultConfig, git, mocked, platform } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import type { RepoGlobalConfig } from '../../config/types';
 import {
@@ -68,7 +62,7 @@ const limits = mocked(_limits);
 
 const adminConfig: RepoGlobalConfig = { localDir: '', cacheDir: '' };
 
-describe(getName(), () => {
+describe('workers/branch/index', () => {
   describe('processBranch', () => {
     const updatedPackageFiles: PackageFilesResult = {
       updatedPackageFiles: [],
diff --git a/lib/workers/branch/lock-files/index.spec.ts b/lib/workers/branch/lock-files/index.spec.ts
index 0933484052..f226dcec5a 100644
--- a/lib/workers/branch/lock-files/index.spec.ts
+++ b/lib/workers/branch/lock-files/index.spec.ts
@@ -1,4 +1,4 @@
-import { getName, git, mocked } from '../../../../test/util';
+import { git, mocked } from '../../../../test/util';
 import { getConfig } from '../../../config/defaults';
 import { setGlobalConfig } from '../../../config/global';
 import * as _lockFiles from '../../../manager/npm/post-update';
@@ -28,7 +28,7 @@ hostRules.find = jest.fn((_) => ({
 
 const { writeUpdatedPackageFiles, getAdditionalFiles } = lockFiles;
 
-describe(getName(), () => {
+describe('workers/branch/lock-files/index', () => {
   describe('writeUpdatedPackageFiles', () => {
     beforeEach(() => {
       setGlobalConfig({
diff --git a/lib/workers/branch/reuse.spec.ts b/lib/workers/branch/reuse.spec.ts
index 1926d260e0..0cec4b645b 100644
--- a/lib/workers/branch/reuse.spec.ts
+++ b/lib/workers/branch/reuse.spec.ts
@@ -1,4 +1,4 @@
-import { getName, git, platform } from '../../../test/util';
+import { git, platform } from '../../../test/util';
 import type { RenovateConfig } from '../../config/types';
 import { Pr } from '../../platform';
 import { PrState } from '../../types';
@@ -6,7 +6,7 @@ import { shouldReuseExistingBranch } from './reuse';
 
 jest.mock('../../util/git');
 
-describe(getName(), () => {
+describe('workers/branch/reuse', () => {
   describe('shouldReuseExistingBranch(config)', () => {
     const pr: Pr = {
       sourceBranch: 'master',
diff --git a/lib/workers/branch/schedule.spec.ts b/lib/workers/branch/schedule.spec.ts
index 0ad1dfb7f0..c6f17ab03f 100644
--- a/lib/workers/branch/schedule.spec.ts
+++ b/lib/workers/branch/schedule.spec.ts
@@ -1,9 +1,8 @@
 import mockDate from 'mockdate';
-import { getName } from '../../../test/util';
 import type { RenovateConfig } from '../../config/types';
 import * as schedule from './schedule';
 
-describe(getName(), () => {
+describe('workers/branch/schedule', () => {
   describe('hasValidTimezone(schedule)', () => {
     it('returns false for invalid timezone', () => {
       expect(schedule.hasValidTimezone('Asia')[0]).toBe(false);
diff --git a/lib/workers/branch/status-checks.spec.ts b/lib/workers/branch/status-checks.spec.ts
index c85c9673e8..02c15babf9 100644
--- a/lib/workers/branch/status-checks.spec.ts
+++ b/lib/workers/branch/status-checks.spec.ts
@@ -1,4 +1,4 @@
-import { defaultConfig, getName, platform } from '../../../test/util';
+import { defaultConfig, platform } from '../../../test/util';
 import { BranchStatus } from '../../types';
 import {
   ConfidenceConfig,
@@ -7,7 +7,7 @@ import {
   setStability,
 } from './status-checks';
 
-describe(getName(), () => {
+describe('workers/branch/status-checks', () => {
   describe('setStability', () => {
     let config: StabilityConfig;
     beforeEach(() => {
diff --git a/lib/workers/global/autodiscover.spec.ts b/lib/workers/global/autodiscover.spec.ts
index 7e5d2f08fa..6a564570c1 100644
--- a/lib/workers/global/autodiscover.spec.ts
+++ b/lib/workers/global/autodiscover.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../../test/util';
 import type { RenovateConfig } from '../../config/types';
 import { PLATFORM_TYPE_GITHUB } from '../../constants/platforms';
 import * as platform from '../../platform';
@@ -13,7 +12,7 @@ jest.unmock('../../platform');
 const hostRules = _hostRules;
 const ghApi: jest.Mocked<typeof _ghApi> = _ghApi as never;
 
-describe(getName(), () => {
+describe('workers/global/autodiscover', () => {
   let config: RenovateConfig;
   beforeEach(async () => {
     jest.resetAllMocks();
diff --git a/lib/workers/global/config/parse/cli.spec.ts b/lib/workers/global/config/parse/cli.spec.ts
index b0b86fd2de..fbce467a3c 100644
--- a/lib/workers/global/config/parse/cli.spec.ts
+++ b/lib/workers/global/config/parse/cli.spec.ts
@@ -1,10 +1,9 @@
-import { getName } from '../../../../../test/util';
 import type { RenovateOptions } from '../../../../config/types';
 import * as datasourceDocker from '../../../../datasource/docker';
 import getArgv from './__fixtures__/argv';
 import * as cli from './cli';
 
-describe(getName(), () => {
+describe('workers/global/config/parse/cli', () => {
   let argv: string[];
   beforeEach(() => {
     argv = getArgv();
diff --git a/lib/workers/global/config/parse/env.spec.ts b/lib/workers/global/config/parse/env.spec.ts
index db5e084318..528179ea0a 100644
--- a/lib/workers/global/config/parse/env.spec.ts
+++ b/lib/workers/global/config/parse/env.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../../../../test/util';
 import type { RenovateOptions } from '../../../../config/types';
 import {
   PLATFORM_TYPE_BITBUCKET,
@@ -6,7 +5,7 @@ import {
 } from '../../../../constants/platforms';
 import * as env from './env';
 
-describe(getName(), () => {
+describe('workers/global/config/parse/env', () => {
   describe('.getConfig(env)', () => {
     it('returns empty env', () => {
       expect(env.getConfig({})).toEqual({ hostRules: [] });
diff --git a/lib/workers/global/config/parse/file.spec.ts b/lib/workers/global/config/parse/file.spec.ts
index df3540a416..f0c3464807 100644
--- a/lib/workers/global/config/parse/file.spec.ts
+++ b/lib/workers/global/config/parse/file.spec.ts
@@ -1,11 +1,10 @@
 import fs from 'fs';
 import { DirectoryResult, dir } from 'tmp-promise';
 import upath from 'upath';
-import { getName } from '../../../../../test/util';
 import customConfig from './__fixtures__/file';
 import * as file from './file';
 
-describe(getName(), () => {
+describe('workers/global/config/parse/file', () => {
   let tmp: DirectoryResult;
 
   beforeAll(async () => {
diff --git a/lib/workers/global/config/parse/index.spec.ts b/lib/workers/global/config/parse/index.spec.ts
index 20412bddc1..cb27212318 100644
--- a/lib/workers/global/config/parse/index.spec.ts
+++ b/lib/workers/global/config/parse/index.spec.ts
@@ -1,5 +1,4 @@
 import upath from 'upath';
-import { getName } from '../../../../../test/util';
 import { readFile } from '../../../../util/fs';
 import getArgv from './__fixtures__/argv';
 
@@ -10,7 +9,7 @@ try {
   // file does not exist
 }
 
-describe(getName(), () => {
+describe('workers/global/config/parse/index', () => {
   describe('.parseConfigs(env, defaultArgv)', () => {
     let configParser: typeof import('.');
     let defaultArgv: string[];
diff --git a/lib/workers/global/index.spec.ts b/lib/workers/global/index.spec.ts
index 624ee5784f..988d2b352e 100644
--- a/lib/workers/global/index.spec.ts
+++ b/lib/workers/global/index.spec.ts
@@ -1,5 +1,5 @@
 import { ERROR, WARN } from 'bunyan';
-import { getName, logger } from '../../../test/util';
+import { logger } from '../../../test/util';
 import {
   PLATFORM_TYPE_GITHUB,
   PLATFORM_TYPE_GITLAB,
@@ -19,7 +19,7 @@ const configParser: jest.Mocked<typeof _configParser> = _configParser as never;
 const platform: jest.Mocked<typeof _platform> = _platform as never;
 const limits = _limits;
 
-describe(getName(), () => {
+describe('workers/global/index', () => {
   beforeEach(() => {
     jest.resetAllMocks();
     logger.getProblems.mockImplementationOnce(() => []);
diff --git a/lib/workers/global/limits.spec.ts b/lib/workers/global/limits.spec.ts
index 1b62c0c760..70513dd4ee 100644
--- a/lib/workers/global/limits.spec.ts
+++ b/lib/workers/global/limits.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../../test/util';
 import {
   Limit,
   incLimitedValue,
@@ -7,7 +6,7 @@ import {
   setMaxLimit,
 } from './limits';
 
-describe(getName(), () => {
+describe('workers/global/limits', () => {
   beforeEach(() => {
     resetAllLimits();
   });
diff --git a/lib/workers/pr/automerge.spec.ts b/lib/workers/pr/automerge.spec.ts
index 416b3e670c..1268a50562 100644
--- a/lib/workers/pr/automerge.spec.ts
+++ b/lib/workers/pr/automerge.spec.ts
@@ -1,4 +1,4 @@
-import { getConfig, getName, git, mocked, partial } from '../../../test/util';
+import { getConfig, git, mocked, partial } from '../../../test/util';
 import { Pr, platform as _platform } from '../../platform';
 import { BranchStatus } from '../../types';
 import { BranchConfig } from '../types';
@@ -9,7 +9,7 @@ jest.mock('../../util/git');
 const platform = mocked(_platform);
 const defaultConfig = getConfig();
 
-describe(getName(), () => {
+describe('workers/pr/automerge', () => {
   describe('checkAutoMerge(pr, config)', () => {
     let config: BranchConfig;
     let pr: Pr;
diff --git a/lib/workers/pr/body/controls.spec.ts b/lib/workers/pr/body/controls.spec.ts
index 7961b26fd8..50724044d3 100644
--- a/lib/workers/pr/body/controls.spec.ts
+++ b/lib/workers/pr/body/controls.spec.ts
@@ -1,11 +1,11 @@
 import { mock } from 'jest-mock-extended';
-import { getName, git } from '../../../../test/util';
+import { git } from '../../../../test/util';
 import { BranchConfig } from '../../types';
 import { getControls } from './controls';
 
 jest.mock('../../../util/git');
 
-describe(getName(), () => {
+describe('workers/pr/body/controls', () => {
   describe('getControls', () => {
     let branchConfig: BranchConfig;
     beforeEach(() => {
diff --git a/lib/workers/pr/changelog/github.spec.ts b/lib/workers/pr/changelog/github.spec.ts
index 19cec8280c..8a260df07a 100644
--- a/lib/workers/pr/changelog/github.spec.ts
+++ b/lib/workers/pr/changelog/github.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../../../test/http-mock';
-import { getName } from '../../../../test/util';
 import { PLATFORM_TYPE_GITHUB } from '../../../constants/platforms';
 import * as hostRules from '../../../util/host-rules';
 import * as semverVersioning from '../../../versioning/semver';
@@ -30,7 +29,7 @@ const upgrade: BranchUpgradeConfig = {
   ],
 };
 
-describe(getName(), () => {
+describe('workers/pr/changelog/github', () => {
   afterEach(() => {
     // FIXME: add missing http mocks
     httpMock.clear(false);
diff --git a/lib/workers/pr/changelog/gitlab.spec.ts b/lib/workers/pr/changelog/gitlab.spec.ts
index 4a74ab94d1..1235d29d95 100644
--- a/lib/workers/pr/changelog/gitlab.spec.ts
+++ b/lib/workers/pr/changelog/gitlab.spec.ts
@@ -1,5 +1,4 @@
 import * as httpMock from '../../../../test/http-mock';
-import { getName } from '../../../../test/util';
 import { PLATFORM_TYPE_GITLAB } from '../../../constants/platforms';
 import * as hostRules from '../../../util/host-rules';
 import * as semverVersioning from '../../../versioning/semver';
@@ -31,7 +30,7 @@ const upgrade: BranchUpgradeConfig = {
 
 const matchHost = 'https://gitlab.com/';
 
-describe(getName(), () => {
+describe('workers/pr/changelog/gitlab', () => {
   afterEach(() => {
     // FIXME: add missing http mocks
     httpMock.clear(false);
diff --git a/lib/workers/pr/changelog/index.spec.ts b/lib/workers/pr/changelog/index.spec.ts
index 85a2f07cf8..ae462fceec 100644
--- a/lib/workers/pr/changelog/index.spec.ts
+++ b/lib/workers/pr/changelog/index.spec.ts
@@ -1,5 +1,5 @@
 import * as httpMock from '../../../../test/http-mock';
-import { getName, partial } from '../../../../test/util';
+import { partial } from '../../../../test/util';
 import { PLATFORM_TYPE_GITHUB } from '../../../constants/platforms';
 import * as hostRules from '../../../util/host-rules';
 import * as semverVersioning from '../../../versioning/semver';
@@ -31,7 +31,7 @@ const upgrade: BranchConfig = partial<BranchConfig>({
   ],
 });
 
-describe(getName(), () => {
+describe('workers/pr/changelog/index', () => {
   describe('getChangeLogJSON', () => {
     beforeEach(() => {
       hostRules.clear();
diff --git a/lib/workers/pr/changelog/release-notes.spec.ts b/lib/workers/pr/changelog/release-notes.spec.ts
index 766afc35bb..526e23d190 100644
--- a/lib/workers/pr/changelog/release-notes.spec.ts
+++ b/lib/workers/pr/changelog/release-notes.spec.ts
@@ -1,6 +1,6 @@
 import { DateTime } from 'luxon';
 import * as httpMock from '../../../../test/http-mock';
-import { getName, loadFixture, mocked } from '../../../../test/util';
+import { loadFixture, mocked } from '../../../../test/util';
 import { clone } from '../../../util/clone';
 import * as _hostRules from '../../../util/host-rules';
 import {
@@ -37,7 +37,7 @@ const gitlabTreeResponse = [
   { path: 'README.md', type: 'blob' },
 ];
 
-describe(getName(), () => {
+describe('workers/pr/changelog/release-notes', () => {
   beforeEach(() => {
     hostRules.find.mockReturnValue({});
     hostRules.hosts.mockReturnValue([]);
diff --git a/lib/workers/pr/changelog/releases.spec.ts b/lib/workers/pr/changelog/releases.spec.ts
index a0f924c1c6..8df46ef4d3 100644
--- a/lib/workers/pr/changelog/releases.spec.ts
+++ b/lib/workers/pr/changelog/releases.spec.ts
@@ -1,11 +1,11 @@
-import { getName, partial } from '../../../../test/util';
+import { partial } from '../../../../test/util';
 import * as datasource from '../../../datasource';
 import * as dockerVersioning from '../../../versioning/docker';
 import * as npmVersioning from '../../../versioning/npm';
 import type { BranchUpgradeConfig } from '../../types';
 import * as releases from './releases';
 
-describe(getName(), () => {
+describe('workers/pr/changelog/releases', () => {
   describe('getReleaseNotes()', () => {
     beforeEach(() => {
       jest.spyOn(datasource, 'getPkgReleases').mockResolvedValueOnce({
diff --git a/lib/workers/pr/code-owners.spec.ts b/lib/workers/pr/code-owners.spec.ts
index 9bb83a09ee..8832dfddbd 100644
--- a/lib/workers/pr/code-owners.spec.ts
+++ b/lib/workers/pr/code-owners.spec.ts
@@ -1,12 +1,12 @@
 import { mock } from 'jest-mock-extended';
-import { fs, getName, git } from '../../../test/util';
+import { fs, git } from '../../../test/util';
 import { Pr } from '../../platform';
 import { codeOwnersForPr } from './code-owners';
 
 jest.mock('../../util/fs');
 jest.mock('../../util/git');
 
-describe(getName(), () => {
+describe('workers/pr/code-owners', () => {
   describe('codeOwnersForPr', () => {
     let pr: Pr;
     beforeEach(() => {
diff --git a/lib/workers/pr/index.spec.ts b/lib/workers/pr/index.spec.ts
index b3c4749a48..746c5dff8f 100644
--- a/lib/workers/pr/index.spec.ts
+++ b/lib/workers/pr/index.spec.ts
@@ -1,4 +1,4 @@
-import { getName, git, mocked, partial } from '../../../test/util';
+import { git, mocked, partial } from '../../../test/util';
 import { getConfig } from '../../config/defaults';
 import { PLATFORM_TYPE_GITLAB } from '../../constants/platforms';
 import { Pr, platform as _platform } from '../../platform';
@@ -97,7 +97,7 @@ function setupGitlabChangelogMock() {
   gitlabChangelogHelper.getChangeLogJSON.mockResolvedValue(resultValue);
 }
 
-describe(getName(), () => {
+describe('workers/pr/index', () => {
   describe('checkAutoMerge(pr, config)', () => {
     let config: BranchConfig;
     let pr: Pr;
diff --git a/lib/workers/repository/configured.spec.ts b/lib/workers/repository/configured.spec.ts
index 16983952ba..521af44123 100644
--- a/lib/workers/repository/configured.spec.ts
+++ b/lib/workers/repository/configured.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig, getName } from '../../../test/util';
+import { RenovateConfig, getConfig } from '../../../test/util';
 import { checkIfConfigured } from './configured';
 
 let config: RenovateConfig;
@@ -7,7 +7,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe(getName(), () => {
+describe('workers/repository/configured', () => {
   describe('checkIfConfigured()', () => {
     it('returns', () => {
       expect(() => checkIfConfigured(config)).not.toThrow();
diff --git a/lib/workers/repository/dependency-dashboard.spec.ts b/lib/workers/repository/dependency-dashboard.spec.ts
index 6d968fe3e6..21955fe7b7 100644
--- a/lib/workers/repository/dependency-dashboard.spec.ts
+++ b/lib/workers/repository/dependency-dashboard.spec.ts
@@ -3,7 +3,6 @@ import { mock } from 'jest-mock-extended';
 import {
   RenovateConfig,
   getConfig,
-  getName,
   loadFixture,
   logger,
   platform,
@@ -41,7 +40,7 @@ async function dryRun(
   expect(platform.ensureIssue).toHaveBeenCalledTimes(ensureIssueCalls);
 }
 
-describe(getName(), () => {
+describe('workers/repository/dependency-dashboard', () => {
   describe('readDashboardBody()', () => {
     it('reads dashboard body', async () => {
       const conf: RenovateConfig = {};
diff --git a/lib/workers/repository/error-config.spec.ts b/lib/workers/repository/error-config.spec.ts
index 7c26ea9001..6f791725ce 100644
--- a/lib/workers/repository/error-config.spec.ts
+++ b/lib/workers/repository/error-config.spec.ts
@@ -1,10 +1,5 @@
 import { mock } from 'jest-mock-extended';
-import {
-  RenovateConfig,
-  getConfig,
-  getName,
-  platform,
-} from '../../../test/util';
+import { RenovateConfig, getConfig, platform } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import { CONFIG_VALIDATION } from '../../constants/error-messages';
 import { Pr } from '../../platform';
@@ -19,7 +14,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe(getName(), () => {
+describe('workers/repository/error-config', () => {
   describe('raiseConfigWarningIssue()', () => {
     beforeEach(() => {
       setGlobalConfig();
diff --git a/lib/workers/repository/error.spec.ts b/lib/workers/repository/error.spec.ts
index f99b290d96..4d79735e3c 100644
--- a/lib/workers/repository/error.spec.ts
+++ b/lib/workers/repository/error.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig, getName } from '../../../test/util';
+import { RenovateConfig, getConfig } from '../../../test/util';
 import {
   CONFIG_SECRETS_EXPOSED,
   CONFIG_VALIDATION,
@@ -38,7 +38,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe(getName(), () => {
+describe('workers/repository/error', () => {
   describe('handleError()', () => {
     const errors = [
       REPOSITORY_UNINITIATED,
diff --git a/lib/workers/repository/extract/file-match.spec.ts b/lib/workers/repository/extract/file-match.spec.ts
index a87f664065..f9b100a59d 100644
--- a/lib/workers/repository/extract/file-match.spec.ts
+++ b/lib/workers/repository/extract/file-match.spec.ts
@@ -1,9 +1,9 @@
-import { RenovateConfig, getName } from '../../../../test/util';
+import { RenovateConfig } from '../../../../test/util';
 import * as fileMatch from './file-match';
 
 jest.mock('../../../util/git');
 
-describe(getName(), () => {
+describe('workers/repository/extract/file-match', () => {
   const fileList = ['package.json', 'frontend/package.json'];
   describe('getIncludedFiles()', () => {
     it('returns fileList if no includePaths', () => {
diff --git a/lib/workers/repository/extract/index.spec.ts b/lib/workers/repository/extract/index.spec.ts
index d00bccd055..ee87d1e108 100644
--- a/lib/workers/repository/extract/index.spec.ts
+++ b/lib/workers/repository/extract/index.spec.ts
@@ -1,4 +1,4 @@
-import { defaultConfig, getName, git, mocked } from '../../../../test/util';
+import { defaultConfig, git, mocked } from '../../../../test/util';
 import type { RenovateConfig } from '../../../config/types';
 import * as _managerFiles from './manager-files';
 import { extractAllDependencies } from '.';
@@ -8,7 +8,7 @@ jest.mock('../../../util/git');
 
 const managerFiles = mocked(_managerFiles);
 
-describe(getName(), () => {
+describe('workers/repository/extract/index', () => {
   describe('extractAllDependencies()', () => {
     let config: RenovateConfig;
     const fileList = ['README', 'package.json', 'tasks/ansible.yaml'];
diff --git a/lib/workers/repository/extract/manager-files.spec.ts b/lib/workers/repository/extract/manager-files.spec.ts
index b3d9c3fba3..c83f5a55f7 100644
--- a/lib/workers/repository/extract/manager-files.spec.ts
+++ b/lib/workers/repository/extract/manager-files.spec.ts
@@ -1,4 +1,4 @@
-import { fs, getConfig, getName, mocked } from '../../../../test/util';
+import { fs, getConfig, mocked } from '../../../../test/util';
 import type { RenovateConfig } from '../../../config/types';
 import * as _html from '../../../manager/html';
 import * as _fileMatch from './file-match';
@@ -11,7 +11,7 @@ jest.mock('../../../util/fs');
 const fileMatch = mocked(_fileMatch);
 const html = mocked(_html);
 
-describe(getName(), () => {
+describe('workers/repository/extract/manager-files', () => {
   describe('getManagerPackageFiles()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/finalise/prune.spec.ts b/lib/workers/repository/finalise/prune.spec.ts
index 04fc03c9d2..05868f9771 100644
--- a/lib/workers/repository/finalise/prune.spec.ts
+++ b/lib/workers/repository/finalise/prune.spec.ts
@@ -1,7 +1,6 @@
 import {
   RenovateConfig,
   getConfig,
-  getName,
   git,
   platform,
 } from '../../../../test/util';
@@ -20,7 +19,7 @@ beforeEach(() => {
   config.warnings = [];
 });
 
-describe(getName(), () => {
+describe('workers/repository/finalise/prune', () => {
   describe('pruneStaleBranches()', () => {
     beforeEach(() => {
       setGlobalConfig();
diff --git a/lib/workers/repository/index.spec.ts b/lib/workers/repository/index.spec.ts
index 4bff4b655d..28fda46862 100644
--- a/lib/workers/repository/index.spec.ts
+++ b/lib/workers/repository/index.spec.ts
@@ -1,6 +1,6 @@
 import { mock } from 'jest-mock-extended';
 
-import { RenovateConfig, getConfig, getName, mocked } from '../../../test/util';
+import { RenovateConfig, getConfig, mocked } from '../../../test/util';
 import { setGlobalConfig } from '../../config/global';
 import * as _process from './process';
 import { ExtractResult } from './process/extract-update';
@@ -13,7 +13,7 @@ jest.mock('./process');
 jest.mock('./result');
 jest.mock('./error');
 
-describe(getName(), () => {
+describe('workers/repository/index', () => {
   describe('renovateRepository()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/init/apis.spec.ts b/lib/workers/repository/init/apis.spec.ts
index 1a7846d200..b35f28d6f2 100644
--- a/lib/workers/repository/init/apis.spec.ts
+++ b/lib/workers/repository/init/apis.spec.ts
@@ -1,16 +1,11 @@
-import {
-  RenovateConfig,
-  getConfig,
-  getName,
-  platform,
-} from '../../../../test/util';
+import { RenovateConfig, getConfig, platform } from '../../../../test/util';
 import {
   REPOSITORY_DISABLED,
   REPOSITORY_FORKED,
 } from '../../../constants/error-messages';
 import { initApis } from './apis';
 
-describe(getName(), () => {
+describe('workers/repository/init/apis', () => {
   describe('initApis', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/init/cache.spec.ts b/lib/workers/repository/init/cache.spec.ts
index e808799ef8..bb3de36699 100644
--- a/lib/workers/repository/init/cache.spec.ts
+++ b/lib/workers/repository/init/cache.spec.ts
@@ -1,8 +1,8 @@
-import { RenovateConfig, getConfig, getName } from '../../../../test/util';
+import { RenovateConfig, getConfig } from '../../../../test/util';
 import { setGlobalConfig } from '../../../config/global';
 import { initializeCaches } from './cache';
 
-describe(getName(), () => {
+describe('workers/repository/init/cache', () => {
   describe('initializeCaches()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/init/index.spec.ts b/lib/workers/repository/init/index.spec.ts
index 241e685e53..16b7e0bbe3 100644
--- a/lib/workers/repository/init/index.spec.ts
+++ b/lib/workers/repository/init/index.spec.ts
@@ -1,4 +1,4 @@
-import { getName, logger, mocked } from '../../../../test/util';
+import { logger, mocked } from '../../../../test/util';
 import { setGlobalConfig } from '../../../config/global';
 import * as _secrets from '../../../config/secrets';
 import * as _onboarding from '../onboarding/branch';
@@ -22,7 +22,7 @@ const merge = mocked(_merge);
 const onboarding = mocked(_onboarding);
 const secrets = mocked(_secrets);
 
-describe(getName(), () => {
+describe('workers/repository/init/index', () => {
   beforeEach(() => {
     setGlobalConfig({ localDir: '', cacheDir: '' });
   });
diff --git a/lib/workers/repository/init/merge.spec.ts b/lib/workers/repository/init/merge.spec.ts
index 6e45601909..2fb761c2b1 100644
--- a/lib/workers/repository/init/merge.spec.ts
+++ b/lib/workers/repository/init/merge.spec.ts
@@ -2,7 +2,6 @@ import {
   RenovateConfig,
   fs,
   getConfig,
-  getName,
   git,
   mocked,
   platform,
@@ -33,7 +32,7 @@ beforeEach(() => {
 jest.mock('../../../config/migration');
 jest.mock('../../../config/migrate-validate');
 
-describe(getName(), () => {
+describe('workers/repository/init/merge', () => {
   describe('detectRepoFileConfig()', () => {
     beforeEach(async () => {
       await initialize({});
diff --git a/lib/workers/repository/init/semantic.spec.ts b/lib/workers/repository/init/semantic.spec.ts
index e3be88d5c7..c043f5b9e7 100644
--- a/lib/workers/repository/init/semantic.spec.ts
+++ b/lib/workers/repository/init/semantic.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig, getName, git } from '../../../../test/util';
+import { RenovateConfig, getConfig, git } from '../../../../test/util';
 import { initialize } from '../../../util/cache/repository';
 import { detectSemanticCommits } from './semantic';
 
@@ -12,7 +12,7 @@ beforeEach(() => {
   config.warnings = [];
 });
 
-describe(getName(), () => {
+describe('workers/repository/init/semantic', () => {
   describe('detectSemanticCommits()', () => {
     beforeEach(async () => {
       await initialize({});
diff --git a/lib/workers/repository/init/vulnerability.spec.ts b/lib/workers/repository/init/vulnerability.spec.ts
index 3bbfae3f1b..c894e046eb 100644
--- a/lib/workers/repository/init/vulnerability.spec.ts
+++ b/lib/workers/repository/init/vulnerability.spec.ts
@@ -1,7 +1,6 @@
 import {
   RenovateConfig,
   defaultConfig,
-  getName,
   partial,
   platform,
 } from '../../../../test/util';
@@ -15,7 +14,7 @@ beforeEach(() => {
   config = JSON.parse(JSON.stringify(defaultConfig));
 });
 
-describe(getName(), () => {
+describe('workers/repository/init/vulnerability', () => {
   describe('detectVulnerabilityAlerts()', () => {
     it('returns if alerts are missing', async () => {
       delete config.vulnerabilityAlerts;
diff --git a/lib/workers/repository/model/commit-message.spec.ts b/lib/workers/repository/model/commit-message.spec.ts
index 9290af0bba..6c55493438 100644
--- a/lib/workers/repository/model/commit-message.spec.ts
+++ b/lib/workers/repository/model/commit-message.spec.ts
@@ -1,7 +1,6 @@
-import { getName } from '../../../../test/util';
 import { CommitMessage } from './commit-message';
 
-describe(getName(), () => {
+describe('workers/repository/model/commit-message', () => {
   describe('CommitMessage', () => {
     const TEST_CASES: ReadonlyArray<
       [message: string, prefix: string | undefined, result: string]
diff --git a/lib/workers/repository/onboarding/branch/config.spec.ts b/lib/workers/repository/onboarding/branch/config.spec.ts
index caa8982abc..28eaacb6d8 100644
--- a/lib/workers/repository/onboarding/branch/config.spec.ts
+++ b/lib/workers/repository/onboarding/branch/config.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig, getName } from '../../../../../test/util';
+import { RenovateConfig, getConfig } from '../../../../../test/util';
 import * as presets from '../../../../config/presets/local';
 import { PRESET_DEP_NOT_FOUND } from '../../../../config/presets/util';
 import { getOnboardingConfig, getOnboardingConfigContents } from './config';
@@ -7,7 +7,7 @@ jest.mock('../../../../config/presets/local');
 
 const mockedPresets = presets as jest.Mocked<typeof presets>;
 
-describe(getName(), () => {
+describe('workers/repository/onboarding/branch/config', () => {
   let config: RenovateConfig;
   beforeEach(() => {
     jest.clearAllMocks();
diff --git a/lib/workers/repository/onboarding/branch/create.spec.ts b/lib/workers/repository/onboarding/branch/create.spec.ts
index 3ea76b528a..342ed1a987 100644
--- a/lib/workers/repository/onboarding/branch/create.spec.ts
+++ b/lib/workers/repository/onboarding/branch/create.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig, getName } from '../../../../../test/util';
+import { RenovateConfig, getConfig } from '../../../../../test/util';
 import { commitFiles } from '../../../../util/git';
 import { CommitMessage } from '../../model/commit-message';
 import { createOnboardingBranch } from './create';
@@ -25,7 +25,7 @@ const buildExpectedCommitFilesArgument = (
   message,
 });
 
-describe(getName(), () => {
+describe('workers/repository/onboarding/branch/create', () => {
   let config: RenovateConfig;
   beforeEach(() => {
     jest.clearAllMocks();
diff --git a/lib/workers/repository/onboarding/branch/index.spec.ts b/lib/workers/repository/onboarding/branch/index.spec.ts
index dd151c063a..951c969f79 100644
--- a/lib/workers/repository/onboarding/branch/index.spec.ts
+++ b/lib/workers/repository/onboarding/branch/index.spec.ts
@@ -3,7 +3,6 @@ import {
   RenovateConfig,
   fs,
   getConfig,
-  getName,
   git,
   mocked,
   platform,
@@ -30,7 +29,7 @@ jest.mock('./config');
 
 const cache = mocked(_cache);
 
-describe(getName(), () => {
+describe('workers/repository/onboarding/branch/index', () => {
   describe('checkOnboardingBranch', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/onboarding/branch/rebase.spec.ts b/lib/workers/repository/onboarding/branch/rebase.spec.ts
index 52e12e6f4a..4d3ea90d7d 100644
--- a/lib/workers/repository/onboarding/branch/rebase.spec.ts
+++ b/lib/workers/repository/onboarding/branch/rebase.spec.ts
@@ -1,14 +1,9 @@
-import {
-  RenovateConfig,
-  defaultConfig,
-  getName,
-  git,
-} from '../../../../../test/util';
+import { RenovateConfig, defaultConfig, git } from '../../../../../test/util';
 import { rebaseOnboardingBranch } from './rebase';
 
 jest.mock('../../../../util/git');
 
-describe(getName(), () => {
+describe('workers/repository/onboarding/branch/rebase', () => {
   describe('rebaseOnboardingBranch()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/onboarding/pr/base-branch.spec.ts b/lib/workers/repository/onboarding/pr/base-branch.spec.ts
index 107feb61e1..bd0993b32d 100644
--- a/lib/workers/repository/onboarding/pr/base-branch.spec.ts
+++ b/lib/workers/repository/onboarding/pr/base-branch.spec.ts
@@ -1,8 +1,8 @@
-import { RenovateConfig, getConfig, getName } from '../../../../../test/util';
+import { RenovateConfig, getConfig } from '../../../../../test/util';
 
 import { getBaseBranchDesc } from './base-branch';
 
-describe(getName(), () => {
+describe('workers/repository/onboarding/pr/base-branch', () => {
   describe('getBaseBranchDesc()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/onboarding/pr/config-description.spec.ts b/lib/workers/repository/onboarding/pr/config-description.spec.ts
index b91268a709..2229c6c4cc 100644
--- a/lib/workers/repository/onboarding/pr/config-description.spec.ts
+++ b/lib/workers/repository/onboarding/pr/config-description.spec.ts
@@ -1,8 +1,8 @@
-import { RenovateConfig, getConfig, getName } from '../../../../../test/util';
+import { RenovateConfig, getConfig } from '../../../../../test/util';
 import type { PackageFile } from '../../../../manager/types';
 import { getConfigDesc } from './config-description';
 
-describe(getName(), () => {
+describe('workers/repository/onboarding/pr/config-description', () => {
   describe('getConfigDesc()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/onboarding/pr/errors-warnings.spec.ts b/lib/workers/repository/onboarding/pr/errors-warnings.spec.ts
index 9c31de703a..7790cbd307 100644
--- a/lib/workers/repository/onboarding/pr/errors-warnings.spec.ts
+++ b/lib/workers/repository/onboarding/pr/errors-warnings.spec.ts
@@ -1,8 +1,8 @@
-import { RenovateConfig, getConfig, getName } from '../../../../../test/util';
+import { RenovateConfig, getConfig } from '../../../../../test/util';
 import type { PackageFile } from '../../../../manager/types';
 import { getDepWarnings, getErrors, getWarnings } from './errors-warnings';
 
-describe(getName(), () => {
+describe('workers/repository/onboarding/pr/errors-warnings', () => {
   describe('getWarnings()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/onboarding/pr/index.spec.ts b/lib/workers/repository/onboarding/pr/index.spec.ts
index 4e9636ee42..caa5e23b1f 100644
--- a/lib/workers/repository/onboarding/pr/index.spec.ts
+++ b/lib/workers/repository/onboarding/pr/index.spec.ts
@@ -1,7 +1,6 @@
 import {
   RenovateConfig,
   defaultConfig,
-  getName,
   git,
   partial,
   platform,
@@ -15,7 +14,7 @@ import { ensureOnboardingPr } from '.';
 
 jest.mock('../../../../util/git');
 
-describe(getName(), () => {
+describe('workers/repository/onboarding/pr/index', () => {
   describe('ensureOnboardingPr()', () => {
     let config: RenovateConfig;
     let packageFiles: Record<string, PackageFile[]>;
diff --git a/lib/workers/repository/onboarding/pr/pr-list.spec.ts b/lib/workers/repository/onboarding/pr/pr-list.spec.ts
index b43d83470c..7971514845 100644
--- a/lib/workers/repository/onboarding/pr/pr-list.spec.ts
+++ b/lib/workers/repository/onboarding/pr/pr-list.spec.ts
@@ -1,8 +1,8 @@
-import { RenovateConfig, getConfig, getName } from '../../../../../test/util';
+import { RenovateConfig, getConfig } from '../../../../../test/util';
 import type { BranchConfig } from '../../../types';
 import { getPrList } from './pr-list';
 
-describe(getName(), () => {
+describe('workers/repository/onboarding/pr/pr-list', () => {
   describe('getPrList()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/process/deprecated.spec.ts b/lib/workers/repository/process/deprecated.spec.ts
index 869d02e5a3..dd53179b76 100644
--- a/lib/workers/repository/process/deprecated.spec.ts
+++ b/lib/workers/repository/process/deprecated.spec.ts
@@ -1,7 +1,7 @@
-import { RenovateConfig, getName, platform } from '../../../../test/util';
+import { RenovateConfig, platform } from '../../../../test/util';
 import { raiseDeprecationWarnings } from './deprecated';
 
-describe(getName(), () => {
+describe('workers/repository/process/deprecated', () => {
   describe('raiseDeprecationWarnings()', () => {
     it('returns if onboarding', async () => {
       const config = {};
diff --git a/lib/workers/repository/process/extract-update.spec.ts b/lib/workers/repository/process/extract-update.spec.ts
index 8d58060717..ae98f5efba 100644
--- a/lib/workers/repository/process/extract-update.spec.ts
+++ b/lib/workers/repository/process/extract-update.spec.ts
@@ -1,5 +1,5 @@
 import hasha from 'hasha';
-import { getName, git, mocked } from '../../../../test/util';
+import { git, mocked } from '../../../../test/util';
 import type { PackageFile } from '../../../manager/types';
 import * as _repositoryCache from '../../../util/cache/repository';
 import * as _branchify from '../updates/branchify';
@@ -21,7 +21,7 @@ branchify.branchifyUpgrades.mockResolvedValueOnce({
   branchList: ['branchName'],
 });
 
-describe(getName(), () => {
+describe('workers/repository/process/extract-update', () => {
   describe('extract()', () => {
     it('runs with no baseBranches', async () => {
       const config = {
diff --git a/lib/workers/repository/process/fetch.spec.ts b/lib/workers/repository/process/fetch.spec.ts
index 988a782264..25b9e901a4 100644
--- a/lib/workers/repository/process/fetch.spec.ts
+++ b/lib/workers/repository/process/fetch.spec.ts
@@ -1,9 +1,4 @@
-import {
-  RenovateConfig,
-  getConfig,
-  getName,
-  mocked,
-} from '../../../../test/util';
+import { RenovateConfig, getConfig, mocked } from '../../../../test/util';
 import * as datasourceMaven from '../../../datasource/maven';
 import type { PackageFile } from '../../../manager/types';
 import { fetchUpdates } from './fetch';
@@ -13,7 +8,7 @@ const lookupUpdates = mocked(lookup).lookupUpdates;
 
 jest.mock('./lookup');
 
-describe(getName(), () => {
+describe('workers/repository/process/fetch', () => {
   describe('fetchUpdates()', () => {
     let config: RenovateConfig;
     beforeEach(() => {
diff --git a/lib/workers/repository/process/index.spec.ts b/lib/workers/repository/process/index.spec.ts
index ff88cc5c70..63a53900e6 100644
--- a/lib/workers/repository/process/index.spec.ts
+++ b/lib/workers/repository/process/index.spec.ts
@@ -1,10 +1,4 @@
-import {
-  RenovateConfig,
-  getConfig,
-  getName,
-  git,
-  mocked,
-} from '../../../../test/util';
+import { RenovateConfig, getConfig, git, mocked } from '../../../../test/util';
 import * as _extractUpdate from './extract-update';
 import { extractDependencies, updateRepo } from '.';
 
@@ -19,7 +13,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe(getName(), () => {
+describe('workers/repository/process/index', () => {
   describe('processRepo()', () => {
     it('processes single branches', async () => {
       const res = await extractDependencies(config);
diff --git a/lib/workers/repository/process/limits.spec.ts b/lib/workers/repository/process/limits.spec.ts
index fe6f7c982d..7f1128ea90 100644
--- a/lib/workers/repository/process/limits.spec.ts
+++ b/lib/workers/repository/process/limits.spec.ts
@@ -2,7 +2,6 @@ import { DateTime } from 'luxon';
 import {
   RenovateConfig,
   getConfig,
-  getName,
   git,
   platform,
 } from '../../../../test/util';
@@ -18,7 +17,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe(getName(), () => {
+describe('workers/repository/process/limits', () => {
   describe('getPrHourlyRemaining()', () => {
     it('calculates hourly limit remaining', async () => {
       const time = DateTime.local();
diff --git a/lib/workers/repository/process/lookup/filter-checks.spec.ts b/lib/workers/repository/process/lookup/filter-checks.spec.ts
index fd63fe53c3..7ab19a7a28 100644
--- a/lib/workers/repository/process/lookup/filter-checks.spec.ts
+++ b/lib/workers/repository/process/lookup/filter-checks.spec.ts
@@ -1,4 +1,4 @@
-import { getConfig, getName, mocked } from '../../../../../test/util';
+import { getConfig, mocked } from '../../../../../test/util';
 import type { Release } from '../../../../datasource';
 import { clone } from '../../../../util/clone';
 import * as _dateUtil from '../../../../util/date';
@@ -36,7 +36,7 @@ const releases: Release[] = [
   },
 ];
 
-describe(getName(), () => {
+describe('workers/repository/process/lookup/filter-checks', () => {
   let sortedReleases: Release[];
   beforeEach(() => {
     config = getConfig();
diff --git a/lib/workers/repository/process/lookup/index.spec.ts b/lib/workers/repository/process/lookup/index.spec.ts
index add2ba3e2d..e47571fe33 100644
--- a/lib/workers/repository/process/lookup/index.spec.ts
+++ b/lib/workers/repository/process/lookup/index.spec.ts
@@ -1,7 +1,6 @@
 import * as httpMock from '../../../../../test/http-mock';
 import {
   getConfig,
-  getName,
   loadJsonFixture,
   mocked,
   partial,
@@ -49,7 +48,7 @@ Object.assign(githubReleases, { defaultRegistryUrls: ['https://github.com'] });
 
 let config: LookupUpdateConfig;
 
-describe(getName(), () => {
+describe('workers/repository/process/lookup/index', () => {
   beforeEach(() => {
     // TODO: fix types
     config = partial<LookupUpdateConfig>(getConfig());
diff --git a/lib/workers/repository/process/sort.spec.ts b/lib/workers/repository/process/sort.spec.ts
index 2e1803ba07..17558593fb 100644
--- a/lib/workers/repository/process/sort.spec.ts
+++ b/lib/workers/repository/process/sort.spec.ts
@@ -1,8 +1,7 @@
-import { getName } from '../../../../test/util';
 import type { UpdateType } from '../../../config/types';
 import { sortBranches } from './sort';
 
-describe(getName(), () => {
+describe('workers/repository/process/sort', () => {
   describe('sortBranches()', () => {
     it('sorts based on updateType and prTitle', () => {
       const branches = [
diff --git a/lib/workers/repository/process/write.spec.ts b/lib/workers/repository/process/write.spec.ts
index 1e40134c72..5b57436fd4 100644
--- a/lib/workers/repository/process/write.spec.ts
+++ b/lib/workers/repository/process/write.spec.ts
@@ -1,10 +1,4 @@
-import {
-  RenovateConfig,
-  getConfig,
-  getName,
-  git,
-  mocked,
-} from '../../../../test/util';
+import { RenovateConfig, getConfig, git, mocked } from '../../../../test/util';
 import * as _branchWorker from '../../branch';
 import { Limit, isLimitReached } from '../../global/limits';
 import { BranchConfig, BranchResult } from '../../types';
@@ -27,7 +21,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe(getName(), () => {
+describe('workers/repository/process/write', () => {
   describe('writeUpdates()', () => {
     it('stops after automerge', async () => {
       const branches: BranchConfig[] = [
diff --git a/lib/workers/repository/result.spec.ts b/lib/workers/repository/result.spec.ts
index 781bcc717f..1966de1cef 100644
--- a/lib/workers/repository/result.spec.ts
+++ b/lib/workers/repository/result.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig, getName } from '../../../test/util';
+import { RenovateConfig, getConfig } from '../../../test/util';
 import { processResult } from './result';
 
 let config: RenovateConfig;
@@ -7,7 +7,7 @@ beforeEach(() => {
   config = getConfig();
 });
 
-describe(getName(), () => {
+describe('workers/repository/result', () => {
   describe('processResult()', () => {
     it('runs', () => {
       const result = processResult(config, 'done');
diff --git a/lib/workers/repository/stats.spec.ts b/lib/workers/repository/stats.spec.ts
index 4408d53dae..a62796aa98 100644
--- a/lib/workers/repository/stats.spec.ts
+++ b/lib/workers/repository/stats.spec.ts
@@ -1,4 +1,3 @@
-import { getName } from '../../../test/util';
 import * as memCache_ from '../../util/cache/memory';
 import { printRequestStats } from './stats';
 
@@ -6,7 +5,7 @@ jest.mock('../../util/cache/memory');
 
 const memCache: any = memCache_ as any;
 
-describe(getName(), () => {
+describe('workers/repository/stats', () => {
   describe('printRequestStats()', () => {
     it('runs', () => {
       memCache.get = jest.fn(() => [
diff --git a/lib/workers/repository/updates/branch-name.spec.ts b/lib/workers/repository/updates/branch-name.spec.ts
index 115b60c7b1..15ca57ac5c 100644
--- a/lib/workers/repository/updates/branch-name.spec.ts
+++ b/lib/workers/repository/updates/branch-name.spec.ts
@@ -1,8 +1,7 @@
-import { getName } from '../../../../test/util';
 import type { RenovateConfig } from '../../../config/types';
 import { generateBranchName } from './branch-name';
 
-describe(getName(), () => {
+describe('workers/repository/updates/branch-name', () => {
   describe('getBranchName()', () => {
     it('uses groupName if no slug defined', () => {
       const upgrade: RenovateConfig = {
diff --git a/lib/workers/repository/updates/branchify.spec.ts b/lib/workers/repository/updates/branchify.spec.ts
index 8a5fd94886..37ec326838 100644
--- a/lib/workers/repository/updates/branchify.spec.ts
+++ b/lib/workers/repository/updates/branchify.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getName, mocked } from '../../../../test/util';
+import { RenovateConfig, mocked } from '../../../../test/util';
 import { getConfig } from '../../../config/defaults';
 import * as _changelog from '../changelog';
 import { branchifyUpgrades } from './branchify';
@@ -18,7 +18,7 @@ beforeEach(() => {
   config.warnings = [];
 });
 
-describe(getName(), () => {
+describe('workers/repository/updates/branchify', () => {
   describe('branchifyUpgrades()', () => {
     it('returns empty', async () => {
       flattenUpdates.mockResolvedValueOnce([]);
diff --git a/lib/workers/repository/updates/flatten.spec.ts b/lib/workers/repository/updates/flatten.spec.ts
index 984673ed05..4db3fec151 100644
--- a/lib/workers/repository/updates/flatten.spec.ts
+++ b/lib/workers/repository/updates/flatten.spec.ts
@@ -1,4 +1,4 @@
-import { RenovateConfig, getConfig, getName } from '../../../../test/util';
+import { RenovateConfig, getConfig } from '../../../../test/util';
 
 import { LANGUAGE_DOCKER } from '../../../constants/languages';
 import { flattenUpdates } from './flatten';
@@ -11,7 +11,7 @@ beforeEach(() => {
   config.warnings = [];
 });
 
-describe(getName(), () => {
+describe('workers/repository/updates/flatten', () => {
   describe('flattenUpdates()', () => {
     it('flattens', async () => {
       config.lockFileMaintenance.enabled = true;
diff --git a/lib/workers/repository/updates/generate.spec.ts b/lib/workers/repository/updates/generate.spec.ts
index 0b0fb7eccb..bc6cdbd97f 100644
--- a/lib/workers/repository/updates/generate.spec.ts
+++ b/lib/workers/repository/updates/generate.spec.ts
@@ -1,4 +1,4 @@
-import { defaultConfig, getName, partial } from '../../../../test/util';
+import { defaultConfig, partial } from '../../../../test/util';
 import type { UpdateType } from '../../../config/types';
 import * as datasourceNpm from '../../../datasource/npm';
 import type { BranchUpgradeConfig } from '../../types';
@@ -8,7 +8,7 @@ beforeEach(() => {
   jest.resetAllMocks();
 });
 
-describe(getName(), () => {
+describe('workers/repository/updates/generate', () => {
   describe('generateBranchConfig()', () => {
     it('does not group single upgrade', () => {
       const branch = [
diff --git a/package.json b/package.json
index db9bba8946..183b099922 100644
--- a/package.json
+++ b/package.json
@@ -202,6 +202,7 @@
     "@jest/reporters": "27.0.6",
     "@jest/test-result": "27.0.6",
     "@ls-lint/ls-lint": "1.10.0",
+    "@renovate/eslint-plugin": "https://github.com/renovatebot/eslint-plugin#v0.0.3",
     "@semantic-release/exec": "5.0.0",
     "@types/bunyan": "1.8.7",
     "@types/cacache": "15.0.1",
diff --git a/test/util.ts b/test/util.ts
index 868fa0f048..ab90bbbf2a 100644
--- a/test/util.ts
+++ b/test/util.ts
@@ -75,12 +75,6 @@ function getCallerFileName(): string | null {
   return result;
 }
 
-export function getName(): string {
-  const file = getCallerFileName();
-  const [, name] = /lib\/(.*?)\.spec\.ts$/.exec(file.replace(/\\/g, '/'));
-  return name;
-}
-
 export function getFixturePath(fixtureFile: string, fixtureRoot = '.'): string {
   const callerDir = upath.dirname(getCallerFileName());
   return upath.join(callerDir, fixtureRoot, '__fixtures__', fixtureFile);
diff --git a/test/website-docs.spec.ts b/test/website-docs.spec.ts
index 05792120fb..8b8f542cf3 100644
--- a/test/website-docs.spec.ts
+++ b/test/website-docs.spec.ts
@@ -18,7 +18,7 @@ declare global {
 
 const options = getOptions();
 
-describe('docs', () => {
+describe('website-docs', () => {
   const doc = fs.readFileSync('docs/usage/configuration-options.md', 'utf8');
   const selfHostDoc = fs.readFileSync(
     'docs/usage/self-hosted-configuration.md',
diff --git a/yarn.lock b/yarn.lock
index 78dc4419c2..4748298b20 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1469,6 +1469,10 @@
   dependencies:
     "@octokit/openapi-types" "^9.5.0"
 
+"@renovate/eslint-plugin@https://github.com/renovatebot/eslint-plugin#v0.0.3":
+  version "0.0.1"
+  resolved "https://github.com/renovatebot/eslint-plugin#c88253170ce9e9248bc0653197ed2ff1ecf41ac1"
+
 "@renovate/pep440@1.0.0":
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/@renovate/pep440/-/pep440-1.0.0.tgz#9e05cac649b6a3d027cba7f2939b085de78f39ea"
-- 
GitLab