diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index 658e34269b3d382ced20227fa534a7b7445845db..cbffe3c5fddd8e6729bcebdf59f5e23be195ea62 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -368,6 +368,7 @@ const options = [
       'hashicorp',
       'loose',
       'node',
+      'npm',
       'pep440',
       'ruby',
       'semver',
@@ -1000,6 +1001,7 @@ const options = [
     type: 'json',
     default: {
       fileMatch: ['(^|/)package.json$'],
+      versionScheme: 'npm',
     },
     mergeable: true,
   },
diff --git a/lib/manager/npm/extract/index.js b/lib/manager/npm/extract/index.js
index 27fc428af9c356c88bec44ecbcbf66f46a98091d..25349321727744c7686aac28b4f37920ba68168c 100644
--- a/lib/manager/npm/extract/index.js
+++ b/lib/manager/npm/extract/index.js
@@ -3,7 +3,7 @@ const upath = require('upath');
 const { getLockedVersions } = require('./locked-versions');
 const { detectMonorepos } = require('./monorepo');
 const { mightBeABrowserLibrary } = require('./type');
-const semver = require('../../../versioning/semver');
+const semver = require('../../../versioning/npm');
 
 module.exports = {
   extractAllPackageFiles,
diff --git a/lib/versioning/cargo/index.js b/lib/versioning/cargo/index.js
index 9b2bf6036d6c7c232feb9883f811259dd0285c23..d489469cdcfb44ae7ca01c671a078e0fff943308 100644
--- a/lib/versioning/cargo/index.js
+++ b/lib/versioning/cargo/index.js
@@ -1,4 +1,4 @@
-const semver = require('../semver');
+const npm = require('../npm');
 
 // NOTE: Partial versions like '1.2' don't get converted to '^1.2'
 // because isVersion('1.2') === false
@@ -37,19 +37,19 @@ function npm2cargo(input) {
 }
 
 const isLessThanRange = (version, range) =>
-  semver.isLessThanRange(version, cargo2npm(range));
+  npm.isLessThanRange(version, cargo2npm(range));
 
-const isValid = input => semver.isValid(cargo2npm(input));
+const isValid = input => npm.isValid(cargo2npm(input));
 
-const isVersion = input => semver.isVersion(input);
+const isVersion = input => npm.isVersion(input);
 
-const matches = (version, range) => semver.matches(version, cargo2npm(range));
+const matches = (version, range) => npm.matches(version, cargo2npm(range));
 
 const maxSatisfyingVersion = (versions, range) =>
-  semver.maxSatisfyingVersion(versions, cargo2npm(range));
+  npm.maxSatisfyingVersion(versions, cargo2npm(range));
 
 const minSatisfyingVersion = (versions, range) =>
-  semver.minSatisfyingVersion(versions, cargo2npm(range));
+  npm.minSatisfyingVersion(versions, cargo2npm(range));
 
 const isSingleVersion = constraint =>
   constraint.trim().startsWith('=') &&
@@ -69,7 +69,7 @@ function getNewValue(currentValue, rangeStrategy, fromVersion, toVersion) {
     res += toVersion;
     return res;
   }
-  const newSemver = semver.getNewValue(
+  const newSemver = npm.getNewValue(
     cargo2npm(currentValue),
     rangeStrategy,
     fromVersion,
@@ -84,7 +84,7 @@ function getNewValue(currentValue, rangeStrategy, fromVersion, toVersion) {
 }
 
 module.exports = {
-  ...semver,
+  ...npm,
   isLessThanRange,
   isValid,
   matches,
diff --git a/lib/versioning/composer/index.js b/lib/versioning/composer/index.js
index 9fee015a7a876bfbb368f111621791b1a5eba286..33234aa64718b4da64ae751e997ac1d1fe275472 100644
--- a/lib/versioning/composer/index.js
+++ b/lib/versioning/composer/index.js
@@ -1,4 +1,4 @@
-const semver = require('../semver');
+const npm = require('../npm');
 
 function padZeroes(input) {
   const sections = input.split('.');
@@ -9,10 +9,10 @@ function padZeroes(input) {
 }
 
 function composer2npm(input) {
-  if (semver.isVersion(input)) {
+  if (npm.isVersion(input)) {
     return input;
   }
-  if (semver.isVersion(padZeroes(input))) {
+  if (npm.isVersion(padZeroes(input))) {
     return padZeroes(input);
   }
   let output = input;
@@ -23,36 +23,36 @@ function composer2npm(input) {
   return output;
 }
 
-const equals = (a, b) => semver.equals(composer2npm(a), composer2npm(b));
+const equals = (a, b) => npm.equals(composer2npm(a), composer2npm(b));
 
-const getMajor = version => semver.getMajor(composer2npm(version));
+const getMajor = version => npm.getMajor(composer2npm(version));
 
-const getMinor = version => semver.getMinor(composer2npm(version));
+const getMinor = version => npm.getMinor(composer2npm(version));
 
-const getPatch = version => semver.getPatch(composer2npm(version));
+const getPatch = version => npm.getPatch(composer2npm(version));
 
 const isGreaterThan = (a, b) =>
-  semver.isGreaterThan(composer2npm(a), composer2npm(b));
+  npm.isGreaterThan(composer2npm(a), composer2npm(b));
 
 const isLessThanRange = (version, range) =>
-  semver.isLessThanRange(composer2npm(version), composer2npm(range));
+  npm.isLessThanRange(composer2npm(version), composer2npm(range));
 
-const isSingleVersion = input => semver.isSingleVersion(composer2npm(input));
+const isSingleVersion = input => npm.isSingleVersion(composer2npm(input));
 
-const isStable = version => semver.isStable(composer2npm(version));
+const isStable = version => npm.isStable(composer2npm(version));
 
-const isValid = input => semver.isValid(composer2npm(input));
+const isValid = input => npm.isValid(composer2npm(input));
 
-const isVersion = input => semver.isVersion(composer2npm(input));
+const isVersion = input => npm.isVersion(composer2npm(input));
 
 const matches = (version, range) =>
-  semver.matches(composer2npm(version), composer2npm(range));
+  npm.matches(composer2npm(version), composer2npm(range));
 
 const maxSatisfyingVersion = (versions, range) =>
-  semver.maxSatisfyingVersion(versions.map(composer2npm), composer2npm(range));
+  npm.maxSatisfyingVersion(versions.map(composer2npm), composer2npm(range));
 
 const minSatisfyingVersion = (versions, range) =>
-  semver.minSatisfyingVersion(versions.map(composer2npm), composer2npm(range));
+  npm.minSatisfyingVersion(versions.map(composer2npm), composer2npm(range));
 
 function getNewValue(currentValue, rangeStrategy, fromVersion, toVersion) {
   const toMajor = getMajor(toVersion);
@@ -61,11 +61,11 @@ function getNewValue(currentValue, rangeStrategy, fromVersion, toVersion) {
   if (isVersion(currentValue)) {
     newValue = toVersion;
   } else if (
-    semver.isVersion(padZeroes(toVersion)) &&
-    semver.isValid(currentValue) &&
+    npm.isVersion(padZeroes(toVersion)) &&
+    npm.isValid(currentValue) &&
     composer2npm(currentValue) === currentValue
   ) {
-    newValue = semver.getNewValue(
+    newValue = npm.getNewValue(
       currentValue,
       rangeStrategy,
       fromVersion,
@@ -120,7 +120,7 @@ function getNewValue(currentValue, rangeStrategy, fromVersion, toVersion) {
 }
 
 function sortVersions(a, b) {
-  return semver.sortVersions(composer2npm(a), composer2npm(b));
+  return npm.sortVersions(composer2npm(a), composer2npm(b));
 }
 
 module.exports = {
diff --git a/lib/versioning/hashicorp/index.js b/lib/versioning/hashicorp/index.js
index fcff9be5221ae0fc417c67bb3cf0d983b823c0bb..8d711a5ebfa89e872e61670158d44f1507beb4de 100644
--- a/lib/versioning/hashicorp/index.js
+++ b/lib/versioning/hashicorp/index.js
@@ -1,4 +1,4 @@
-const semver = require('../semver');
+const npm = require('../npm');
 
 function hashicorp2npm(input) {
   // The only case incompatible with semver is a "short" ~>, e.g. ~> 1.2
@@ -6,43 +6,32 @@ function hashicorp2npm(input) {
 }
 
 const isLessThanRange = (version, range) =>
-  semver.isLessThanRange(hashicorp2npm(version), hashicorp2npm(range));
+  npm.isLessThanRange(hashicorp2npm(version), hashicorp2npm(range));
 
-const isValid = input => semver.isValid(hashicorp2npm(input));
+const isValid = input => npm.isValid(hashicorp2npm(input));
 
 const matches = (version, range) =>
-  semver.matches(hashicorp2npm(version), hashicorp2npm(range));
+  npm.matches(hashicorp2npm(version), hashicorp2npm(range));
 
 const maxSatisfyingVersion = (versions, range) =>
-  semver.maxSatisfyingVersion(
-    versions.map(hashicorp2npm),
-    hashicorp2npm(range)
-  );
+  npm.maxSatisfyingVersion(versions.map(hashicorp2npm), hashicorp2npm(range));
 
 const minSatisfyingVersion = (versions, range) =>
-  semver.minSatisfyingVersion(
-    versions.map(hashicorp2npm),
-    hashicorp2npm(range)
-  );
+  npm.minSatisfyingVersion(versions.map(hashicorp2npm), hashicorp2npm(range));
 
 function getNewValue(currentValue, rangeStrategy, fromVersion, toVersion) {
   // handle specia. ~> 1.2 case
   if (currentValue.match(/(~>\s*)\d+\.\d+$/)) {
     return currentValue.replace(
       /(~>\s*)\d+\.\d+$/,
-      `$1${semver.getMajor(toVersion)}.0`
+      `$1${npm.getMajor(toVersion)}.0`
     );
   }
-  return semver.getNewValue(
-    currentValue,
-    rangeStrategy,
-    fromVersion,
-    toVersion
-  );
+  return npm.getNewValue(currentValue, rangeStrategy, fromVersion, toVersion);
 }
 
 module.exports = {
-  ...semver,
+  ...npm,
   isLessThanRange,
   isValid,
   matches,
diff --git a/lib/versioning/node/index.js b/lib/versioning/node/index.js
index 547c0dc76a5d17205fa0da9f79e8819d6a6f64ee..b6d025ef9a755f3bc9262af2b93e57f451bfedb7 100644
--- a/lib/versioning/node/index.js
+++ b/lib/versioning/node/index.js
@@ -1,20 +1,20 @@
-const semver = require('../semver');
+const npm = require('../npm');
 
 function getNewValue(currentValue, rangeStrategy, fromVersion, toVersion) {
-  const res = semver.getNewValue(
+  const res = npm.getNewValue(
     currentValue,
     rangeStrategy,
     fromVersion,
     toVersion
   );
-  if (semver.isVersion(res)) {
+  if (npm.isVersion(res)) {
     // normalize out any 'v' prefix
-    return semver.isVersion(res);
+    return npm.isVersion(res);
   }
   return res;
 }
 
 module.exports = {
-  ...semver,
+  ...npm,
   getNewValue,
 };
diff --git a/lib/versioning/npm/index.js b/lib/versioning/npm/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c2e01356a228f95fcc6e9d19ca54ad1075303bc3
--- /dev/null
+++ b/lib/versioning/npm/index.js
@@ -0,0 +1,47 @@
+const semver = require('semver');
+const stable = require('semver-stable');
+const { getNewValue } = require('./range');
+
+const { is: isStable } = stable;
+
+const {
+  compare: sortVersions,
+  maxSatisfying: maxSatisfyingVersion,
+  minSatisfying: minSatisfyingVersion,
+  major: getMajor,
+  minor: getMinor,
+  patch: getPatch,
+  satisfies: matches,
+  valid,
+  validRange,
+  ltr: isLessThanRange,
+  gt: isGreaterThan,
+  eq: equals,
+} = semver;
+
+// If this is left as an alias, inputs like "17.04.0" throw errors
+const isValid = input => validRange(input);
+const isVersion = input => valid(input);
+
+const isSingleVersion = constraint =>
+  isVersion(constraint) ||
+  (constraint.startsWith('=') && isVersion(constraint.substring(1).trim()));
+
+module.exports = {
+  equals,
+  getMajor,
+  getMinor,
+  getPatch,
+  isCompatible: isVersion,
+  isGreaterThan,
+  isLessThanRange,
+  isSingleVersion,
+  isStable,
+  isValid,
+  isVersion,
+  matches,
+  maxSatisfyingVersion,
+  minSatisfyingVersion,
+  getNewValue,
+  sortVersions,
+};
diff --git a/lib/versioning/semver/range.js b/lib/versioning/npm/range.js
similarity index 100%
rename from lib/versioning/semver/range.js
rename to lib/versioning/npm/range.js
diff --git a/lib/versioning/semver/index.js b/lib/versioning/semver/index.js
index c2e01356a228f95fcc6e9d19ca54ad1075303bc3..d702f9abc1490d40c56bc119d6292c65efcbd509 100644
--- a/lib/versioning/semver/index.js
+++ b/lib/versioning/semver/index.js
@@ -1,6 +1,5 @@
 const semver = require('semver');
 const stable = require('semver-stable');
-const { getNewValue } = require('./range');
 
 const { is: isStable } = stable;
 
@@ -13,19 +12,17 @@ const {
   patch: getPatch,
   satisfies: matches,
   valid,
-  validRange,
   ltr: isLessThanRange,
   gt: isGreaterThan,
   eq: equals,
 } = semver;
 
 // If this is left as an alias, inputs like "17.04.0" throw errors
-const isValid = input => validRange(input);
 const isVersion = input => valid(input);
 
-const isSingleVersion = constraint =>
-  isVersion(constraint) ||
-  (constraint.startsWith('=') && isVersion(constraint.substring(1).trim()));
+function getNewValue(currentValue, rangeStrategy, fromVersion, toVersion) {
+  return toVersion;
+}
 
 module.exports = {
   equals,
@@ -35,9 +32,9 @@ module.exports = {
   isCompatible: isVersion,
   isGreaterThan,
   isLessThanRange,
-  isSingleVersion,
+  isSingleVersion: isVersion,
   isStable,
-  isValid,
+  isValid: isVersion,
   isVersion,
   matches,
   maxSatisfyingVersion,
diff --git a/test/versioning/npm.spec.js b/test/versioning/npm.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..a6aca44558ab9fada1d22e9ad6710e3c81588d11
--- /dev/null
+++ b/test/versioning/npm.spec.js
@@ -0,0 +1,118 @@
+const semver = require('../../lib/versioning/npm');
+
+describe('semver.isValid(input)', () => {
+  it('should return null for irregular versions', () => {
+    expect(!!semver.isValid('17.04.0')).toBe(false);
+  });
+  it('should support simple semver', () => {
+    expect(!!semver.isValid('1.2.3')).toBe(true);
+  });
+  it('should support semver with dash', () => {
+    expect(!!semver.isValid('1.2.3-foo')).toBe(true);
+  });
+  it('should reject semver without dash', () => {
+    expect(!!semver.isValid('1.2.3foo')).toBe(false);
+  });
+  it('should support ranges', () => {
+    expect(!!semver.isValid('~1.2.3')).toBe(true);
+    expect(!!semver.isValid('^1.2.3')).toBe(true);
+    expect(!!semver.isValid('>1.2.3')).toBe(true);
+  });
+  it('should reject github repositories', () => {
+    expect(!!semver.isValid('renovatebot/renovate')).toBe(false);
+    expect(!!semver.isValid('renovatebot/renovate#master')).toBe(false);
+    expect(
+      !!semver.isValid('https://github.com/renovatebot/renovate.git')
+    ).toBe(false);
+  });
+});
+describe('semver.isSingleVersion()', () => {
+  it('returns true if naked version', () => {
+    expect(!!semver.isSingleVersion('1.2.3')).toBe(true);
+    expect(!!semver.isSingleVersion('1.2.3-alpha.1')).toBe(true);
+  });
+  it('returns true if equals', () => {
+    expect(!!semver.isSingleVersion('=1.2.3')).toBe(true);
+    expect(!!semver.isSingleVersion('= 1.2.3')).toBe(true);
+  });
+  it('returns false when not version', () => {
+    expect(!!semver.isSingleVersion('1.x')).toBe(false);
+  });
+});
+describe('semver.getNewValue()', () => {
+  it('bumps equals', () => {
+    expect(semver.getNewValue('=1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual(
+      '=1.1.0'
+    );
+  });
+  it('bumps short caret to same', () => {
+    expect(semver.getNewValue('^1.0', 'bump', '1.0.0', '1.0.7')).toEqual(
+      '^1.0'
+    );
+  });
+  it('bumps caret to prerelease', () => {
+    expect(
+      semver.getNewValue('^1', 'bump', '1.0.0', '1.0.7-prerelease.1')
+    ).toEqual('^1.0.7-prerelease.1');
+  });
+  it('replaces with newer', () => {
+    expect(semver.getNewValue('^1.0.0', 'replace', '1.0.0', '1.0.7')).toEqual(
+      '^1.0.7'
+    );
+  });
+  it('supports tilde greater than', () => {
+    expect(semver.getNewValue('~> 1.0.0', 'replace', '1.0.0', '1.1.7')).toEqual(
+      '~> 1.1.0'
+    );
+  });
+  it('bumps short caret to new', () => {
+    expect(semver.getNewValue('^1.0', 'bump', '1.0.0', '1.1.7')).toEqual(
+      '^1.1'
+    );
+  });
+  it('bumps short tilde', () => {
+    expect(semver.getNewValue('~1.0', 'bump', '1.0.0', '1.1.7')).toEqual(
+      '~1.1'
+    );
+  });
+  it('bumps tilde to prerelease', () => {
+    expect(
+      semver.getNewValue('~1.0', 'bump', '1.0.0', '1.0.7-prerelease.1')
+    ).toEqual('~1.0.7-prerelease.1');
+  });
+  it('updates naked caret', () => {
+    expect(semver.getNewValue('^1', 'bump', '1.0.0', '2.1.7')).toEqual('^2');
+  });
+  it('bumps naked tilde', () => {
+    expect(semver.getNewValue('~1', 'bump', '1.0.0', '1.1.7')).toEqual('~1');
+  });
+  it('bumps naked major', () => {
+    expect(semver.getNewValue('5', 'bump', '5.0.0', '5.1.7')).toEqual('5');
+    expect(semver.getNewValue('5', 'bump', '5.0.0', '6.1.7')).toEqual('6');
+  });
+  it('bumps naked minor', () => {
+    expect(semver.getNewValue('5.0', 'bump', '5.0.0', '5.0.7')).toEqual('5.0');
+    expect(semver.getNewValue('5.0', 'bump', '5.0.0', '5.1.7')).toEqual('5.1');
+    expect(semver.getNewValue('5.0', 'bump', '5.0.0', '6.1.7')).toEqual('6.1');
+  });
+  it('replaces equals', () => {
+    expect(semver.getNewValue('=1.0.0', 'replace', '1.0.0', '1.1.0')).toEqual(
+      '=1.1.0'
+    );
+  });
+  it('handles long asterisk', () => {
+    expect(semver.getNewValue('1.0.*', 'replace', '1.0.0', '1.1.0')).toEqual(
+      '1.1.*'
+    );
+  });
+  it('handles short asterisk', () => {
+    expect(semver.getNewValue('1.*', 'replace', '1.0.0', '2.1.0')).toEqual(
+      '2.*'
+    );
+  });
+  it('handles updating from stable to unstable', () => {
+    expect(
+      semver.getNewValue('~0.6.1', 'replace', '0.6.8', '0.7.0-rc.2')
+    ).toEqual('~0.7.0-rc');
+  });
+});
diff --git a/test/versioning/semver.spec.js b/test/versioning/semver.spec.js
index c2df0b6635693b90f96d33d551749b32a5585925..6e2abc8f922adb8d25e919ca31b7a50477a07970 100644
--- a/test/versioning/semver.spec.js
+++ b/test/versioning/semver.spec.js
@@ -13,10 +13,10 @@ describe('semver.isValid(input)', () => {
   it('should reject semver without dash', () => {
     expect(!!semver.isValid('1.2.3foo')).toBe(false);
   });
-  it('should support ranges', () => {
-    expect(!!semver.isValid('~1.2.3')).toBe(true);
-    expect(!!semver.isValid('^1.2.3')).toBe(true);
-    expect(!!semver.isValid('>1.2.3')).toBe(true);
+  it('should reject ranges', () => {
+    expect(!!semver.isValid('~1.2.3')).toBe(false);
+    expect(!!semver.isValid('^1.2.3')).toBe(false);
+    expect(!!semver.isValid('>1.2.3')).toBe(false);
   });
   it('should reject github repositories', () => {
     expect(!!semver.isValid('renovatebot/renovate')).toBe(false);
@@ -31,88 +31,18 @@ describe('semver.isSingleVersion()', () => {
     expect(!!semver.isSingleVersion('1.2.3')).toBe(true);
     expect(!!semver.isSingleVersion('1.2.3-alpha.1')).toBe(true);
   });
-  it('returns true if equals', () => {
-    expect(!!semver.isSingleVersion('=1.2.3')).toBe(true);
-    expect(!!semver.isSingleVersion('= 1.2.3')).toBe(true);
+  it('returns false if equals', () => {
+    expect(!!semver.isSingleVersion('=1.2.3')).toBe(false);
+    expect(!!semver.isSingleVersion('= 1.2.3')).toBe(false);
   });
   it('returns false when not version', () => {
     expect(!!semver.isSingleVersion('1.x')).toBe(false);
   });
 });
 describe('semver.getNewValue()', () => {
-  it('bumps equals', () => {
+  it('uses toVersion', () => {
     expect(semver.getNewValue('=1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual(
-      '=1.1.0'
+      '1.1.0'
     );
   });
-  it('bumps short caret to same', () => {
-    expect(semver.getNewValue('^1.0', 'bump', '1.0.0', '1.0.7')).toEqual(
-      '^1.0'
-    );
-  });
-  it('bumps caret to prerelease', () => {
-    expect(
-      semver.getNewValue('^1', 'bump', '1.0.0', '1.0.7-prerelease.1')
-    ).toEqual('^1.0.7-prerelease.1');
-  });
-  it('replaces with newer', () => {
-    expect(semver.getNewValue('^1.0.0', 'replace', '1.0.0', '1.0.7')).toEqual(
-      '^1.0.7'
-    );
-  });
-  it('supports tilde greater than', () => {
-    expect(semver.getNewValue('~> 1.0.0', 'replace', '1.0.0', '1.1.7')).toEqual(
-      '~> 1.1.0'
-    );
-  });
-  it('bumps short caret to new', () => {
-    expect(semver.getNewValue('^1.0', 'bump', '1.0.0', '1.1.7')).toEqual(
-      '^1.1'
-    );
-  });
-  it('bumps short tilde', () => {
-    expect(semver.getNewValue('~1.0', 'bump', '1.0.0', '1.1.7')).toEqual(
-      '~1.1'
-    );
-  });
-  it('bumps tilde to prerelease', () => {
-    expect(
-      semver.getNewValue('~1.0', 'bump', '1.0.0', '1.0.7-prerelease.1')
-    ).toEqual('~1.0.7-prerelease.1');
-  });
-  it('updates naked caret', () => {
-    expect(semver.getNewValue('^1', 'bump', '1.0.0', '2.1.7')).toEqual('^2');
-  });
-  it('bumps naked tilde', () => {
-    expect(semver.getNewValue('~1', 'bump', '1.0.0', '1.1.7')).toEqual('~1');
-  });
-  it('bumps naked major', () => {
-    expect(semver.getNewValue('5', 'bump', '5.0.0', '5.1.7')).toEqual('5');
-    expect(semver.getNewValue('5', 'bump', '5.0.0', '6.1.7')).toEqual('6');
-  });
-  it('bumps naked minor', () => {
-    expect(semver.getNewValue('5.0', 'bump', '5.0.0', '5.0.7')).toEqual('5.0');
-    expect(semver.getNewValue('5.0', 'bump', '5.0.0', '5.1.7')).toEqual('5.1');
-    expect(semver.getNewValue('5.0', 'bump', '5.0.0', '6.1.7')).toEqual('6.1');
-  });
-  it('replaces equals', () => {
-    expect(semver.getNewValue('=1.0.0', 'replace', '1.0.0', '1.1.0')).toEqual(
-      '=1.1.0'
-    );
-  });
-  it('handles long asterisk', () => {
-    expect(semver.getNewValue('1.0.*', 'replace', '1.0.0', '1.1.0')).toEqual(
-      '1.1.*'
-    );
-  });
-  it('handles short asterisk', () => {
-    expect(semver.getNewValue('1.*', 'replace', '1.0.0', '2.1.0')).toEqual(
-      '2.*'
-    );
-  });
-  it('handles updating from stable to unstable', () => {
-    expect(
-      semver.getNewValue('~0.6.1', 'replace', '0.6.8', '0.7.0-rc.2')
-    ).toEqual('~0.7.0-rc');
-  });
 });
diff --git a/test/workers/repository/process/lookup/index.spec.js b/test/workers/repository/process/lookup/index.spec.js
index 2cfeda88de7d39360d5250e4c9d5aaa049f55cd0..570f5e6b7a821581d80c77459426b9c13cac6d79 100644
--- a/test/workers/repository/process/lookup/index.spec.js
+++ b/test/workers/repository/process/lookup/index.spec.js
@@ -19,6 +19,7 @@ describe('workers/repository/process/lookup', () => {
   beforeEach(() => {
     config = { ...require('../../../../../lib/config/defaults').getConfig() };
     config.manager = 'npm';
+    config.versionScheme = 'npm';
     config.rangeStrategy = 'replace';
     global.repoCache = {};
     jest.resetAllMocks();
diff --git a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
index d164bc1cb6becc057b3192f2b2cccd110e2cba01..5cdd9fcdc5b2cdbd366d88f7fb33b77c07cd502f 100644
--- a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
+++ b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
@@ -86,7 +86,7 @@ Array [
     "unpublishSafe": false,
     "updateLockFiles": true,
     "updateNotScheduled": true,
-    "versionScheme": "semver",
+    "versionScheme": "npm",
     "vulnerabilityAlerts": Object {
       "commitMessageSuffix": "[SECURITY]",
       "enabled": true,
@@ -181,7 +181,7 @@ Array [
     "unpublishSafe": false,
     "updateLockFiles": true,
     "updateNotScheduled": true,
-    "versionScheme": "semver",
+    "versionScheme": "npm",
     "vulnerabilityAlerts": Object {
       "commitMessageSuffix": "[SECURITY]",
       "enabled": true,
@@ -276,7 +276,7 @@ Array [
     "updateLockFiles": true,
     "updateNotScheduled": true,
     "updateType": "lockFileMaintenance",
-    "versionScheme": "semver",
+    "versionScheme": "npm",
     "vulnerabilityAlerts": Object {
       "commitMessageSuffix": "[SECURITY]",
       "enabled": true,
@@ -371,7 +371,7 @@ Array [
     "unpublishSafe": false,
     "updateLockFiles": true,
     "updateNotScheduled": true,
-    "versionScheme": "semver",
+    "versionScheme": "npm",
     "vulnerabilityAlerts": Object {
       "commitMessageSuffix": "[SECURITY]",
       "enabled": true,
@@ -466,7 +466,7 @@ Array [
     "updateLockFiles": true,
     "updateNotScheduled": true,
     "updateType": "lockFileMaintenance",
-    "versionScheme": "semver",
+    "versionScheme": "npm",
     "vulnerabilityAlerts": Object {
       "commitMessageSuffix": "[SECURITY]",
       "enabled": true,
@@ -561,7 +561,7 @@ Array [
     "unpublishSafe": false,
     "updateLockFiles": true,
     "updateNotScheduled": true,
-    "versionScheme": "semver",
+    "versionScheme": "npm",
     "vulnerabilityAlerts": Object {
       "commitMessageSuffix": "[SECURITY]",
       "enabled": true,