Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/lib/cli.js127
-rw-r--r--test/lib/help-search.js72
-rw-r--r--test/lib/help.js88
-rw-r--r--test/lib/load-all-commands.js52
-rw-r--r--test/lib/npm.js1
-rw-r--r--test/lib/run-script.js26
-rw-r--r--test/lib/utils/did-you-mean.js34
-rw-r--r--test/lib/utils/npm-usage.js63
8 files changed, 196 insertions, 267 deletions
diff --git a/test/lib/cli.js b/test/lib/cli.js
index b5441be1e..59769e13f 100644
--- a/test/lib/cli.js
+++ b/test/lib/cli.js
@@ -1,7 +1,11 @@
const t = require('tap')
let LOAD_ERROR = null
+const npmOutputs = []
const npmock = {
+ log: { level: 'silent' },
+ output: (...msg) => npmOutputs.push(msg),
+ usage: 'npm usage test example',
version: '99.99.99',
load: cb => cb(LOAD_ERROR),
argv: [],
@@ -21,8 +25,11 @@ const unsupportedMock = {
}
let errorHandlerCalled = null
+let errorHandlerCb
const errorHandlerMock = (...args) => {
errorHandlerCalled = args
+ if (errorHandlerCb)
+ errorHandlerCb()
}
let errorHandlerExitCalled = null
errorHandlerMock.exit = code => {
@@ -39,15 +46,23 @@ const npmlogMock = {
const requireInject = require('require-inject')
const cli = requireInject.installGlobally('../../lib/cli.js', {
'../../lib/npm.js': npmock,
+ '../../lib/utils/did-you-mean.js': () => 'test did you mean',
'../../lib/utils/unsupported.js': unsupportedMock,
'../../lib/utils/error-handler.js': errorHandlerMock,
npmlog: npmlogMock,
})
t.test('print the version, and treat npm_g to npm -g', t => {
- const { log } = console
- const consoleLogs = []
- console.log = (...msg) => consoleLogs.push(msg)
+ t.teardown(() => {
+ delete npmock.config.settings.version
+ process.argv = argv
+ npmock.argv.length = 0
+ proc.argv.length = 0
+ logs.length = 0
+ npmOutputs.length = 0
+ errorHandlerExitCalled = null
+ })
+
const { argv } = process
const proc = {
argv: ['node', 'npm_g', '-v'],
@@ -67,25 +82,13 @@ t.test('print the version, and treat npm_g to npm -g', t => {
['info', 'using', 'npm@%s', '99.99.99'],
['info', 'using', 'node@%s', '420.69.lol'],
])
- t.strictSame(consoleLogs, [['99.99.99']])
+ t.strictSame(npmOutputs, [['99.99.99']])
t.strictSame(errorHandlerExitCalled, 0)
- delete npmock.config.settings.version
- process.argv = argv
- console.log = log
- npmock.argv.length = 0
- proc.argv.length = 0
- logs.length = 0
- consoleLogs.length = 0
- errorHandlerExitCalled = null
-
t.end()
})
t.test('calling with --versions calls npm version with no args', t => {
- const { log } = console
- const consoleLogs = []
- console.log = (...msg) => consoleLogs.push(msg)
const processArgv = process.argv
const proc = {
argv: ['node', 'npm', 'install', 'or', 'whatever', '--versions'],
@@ -97,11 +100,10 @@ t.test('calling with --versions calls npm version with no args', t => {
t.teardown(() => {
delete npmock.config.settings.versions
process.argv = processArgv
- console.log = log
npmock.argv.length = 0
proc.argv.length = 0
logs.length = 0
- consoleLogs.length = 0
+ npmOutputs.length = 0
errorHandlerExitCalled = null
delete npmock.commands.version
})
@@ -117,7 +119,7 @@ t.test('calling with --versions calls npm version with no args', t => {
['info', 'using', 'node@%s', undefined],
])
- t.strictSame(consoleLogs, [])
+ t.strictSame(npmOutputs, [])
t.strictSame(errorHandlerExitCalled, null)
t.strictSame(args, [])
@@ -127,55 +129,80 @@ t.test('calling with --versions calls npm version with no args', t => {
cli(proc)
})
-t.test('print usage if -h provided', t => {
- const { log } = console
- const consoleLogs = []
- console.log = (...msg) => consoleLogs.push(msg)
+t.test('print usage if no params provided', t => {
+ const { output } = npmock
+ t.teardown(() => {
+ npmock.output = output
+ })
+ const proc = {
+ argv: ['node', 'npm'],
+ on: () => {},
+ }
+ npmock.argv = []
+ npmock.output = (msg) => {
+ if (msg) {
+ t.match(msg, 'npm usage test example', 'outputs npm usage')
+ t.end()
+ }
+ }
+ cli(proc)
+})
+
+t.test('print usage if non-command param provided', t => {
+ const { output } = npmock
+ t.teardown(() => {
+ npmock.output = output
+ })
const proc = {
argv: ['node', 'npm', 'asdf'],
on: () => {},
}
npmock.argv = ['asdf']
+ npmock.output = (msg) => {
+ if (msg) {
+ t.match(msg, 'test did you mean', 'outputs did you mean')
+ t.end()
+ }
+ }
+ cli(proc)
+})
+t.test('gracefully handles error printing usage', t => {
+ const { output } = npmock
t.teardown(() => {
- console.log = log
- npmock.argv.length = 0
- proc.argv.length = 0
- logs.length = 0
- consoleLogs.length = 0
- errorHandlerExitCalled = null
- delete npmock.commands.help
+ npmock.output = output
+ errorHandlerCb = null
})
-
- npmock.commands.help = (args, cb) => {
- delete npmock.commands.help
- t.equal(proc.title, 'npm')
- t.strictSame(args, ['asdf'])
- t.strictSame(npmock.argv, ['asdf'])
- t.strictSame(proc.argv, ['node', 'npm', 'asdf'])
- t.strictSame(logs, [
- 'pause',
- ['verbose', 'cli', ['node', 'npm', 'asdf']],
- ['info', 'using', 'npm@%s', '99.99.99'],
- ['info', 'using', 'node@%s', undefined],
- ])
- t.strictSame(consoleLogs, [])
- t.strictSame(errorHandlerExitCalled, null)
+ const proc = {
+ argv: ['node', 'npm', 'asdf'],
+ on: () => {},
+ }
+ npmock.argv = []
+ npmock.output = (msg) => {
+ throw new Error('test exception')
+ }
+ errorHandlerCb = () => {
+ t.match(errorHandlerCalled, /test exception/)
t.end()
}
-
cli(proc)
})
t.test('load error calls error handler', t => {
- const er = new Error('poop')
+ t.teardown(() => {
+ errorHandlerCb = null
+ LOAD_ERROR = null
+ })
+
+ const er = new Error('test load error')
LOAD_ERROR = er
const proc = {
argv: ['node', 'npm', 'asdf'],
on: () => {},
}
+ errorHandlerCb = () => {
+ t.strictSame(errorHandlerCalled, [er])
+ t.end()
+ }
cli(proc)
- t.strictSame(errorHandlerCalled, [er])
- LOAD_ERROR = null
- t.end()
})
diff --git a/test/lib/help-search.js b/test/lib/help-search.js
index cbb3947d3..f046ba3d2 100644
--- a/test/lib/help-search.js
+++ b/test/lib/help-search.js
@@ -2,33 +2,29 @@ const { test } = require('tap')
const { join } = require('path')
const requireInject = require('require-inject')
const ansicolors = require('ansicolors')
-const mockNpm = require('../fixtures/mock-npm')
const OUTPUT = []
const output = (msg) => {
OUTPUT.push(msg)
}
-let npmHelpArgs = null
-let npmHelpErr = null
-const config = {
+const config = new Map(Object.entries({
long: false,
-}
-const npm = mockNpm({
+}))
+const npmHelpErr = null
+const npm = {
color: false,
config,
+ flatOptions: {
+ long: false,
+ },
+ usage: 'npm test usage',
commands: {
help: (args, cb) => {
- npmHelpArgs = args
return cb(npmHelpErr)
},
},
output,
-})
-
-let npmUsageArg = null
-const npmUsage = (npm, arg) => {
- npmUsageArg = arg
}
let globRoot = null
@@ -47,7 +43,6 @@ const glob = (p, cb) =>
cb(null, Object.keys(globDir).map((file) => join(globRoot, file)))
const HelpSearch = requireInject('../../lib/help-search.js', {
- '../../lib/utils/npm-usage.js': npmUsage,
glob,
})
const helpSearch = new HelpSearch(npm)
@@ -63,8 +58,7 @@ test('npm help-search', t => {
if (err)
throw err
- t.match(OUTPUT, /Top hits for/, 'outputs results')
- t.match(OUTPUT, /Did you mean this\?\n\s+exec/, 'matched command, so suggest it')
+ t.match(OUTPUT, /Top hits for "exec"/, 'outputs results')
t.end()
})
})
@@ -86,46 +80,12 @@ test('npm help-search multiple terms', t => {
})
})
-test('npm help-search single result prints full section', t => {
- globRoot = t.testdir(globDir)
- t.teardown(() => {
- OUTPUT.length = 0
- npmHelpArgs = null
- globRoot = null
- })
-
- return helpSearch.exec(['does not exist in'], (err) => {
- if (err)
- throw err
-
- t.strictSame(npmHelpArgs, ['npm-install'], 'identified the correct man page and called help with it')
- t.end()
- })
-})
-
-test('npm help-search single result propagates error', t => {
- globRoot = t.testdir(globDir)
- npmHelpErr = new Error('help broke')
- t.teardown(() => {
- OUTPUT.length = 0
- npmHelpArgs = null
- npmHelpErr = null
- globRoot = null
- })
-
- return helpSearch.exec(['does not exist in'], (err) => {
- t.strictSame(npmHelpArgs, ['npm-install'], 'identified the correct man page and called help with it')
- t.match(err, /help broke/, 'propagated the error from help')
- t.end()
- })
-})
-
test('npm help-search long output', t => {
globRoot = t.testdir(globDir)
- config.long = true
+ config.set('long', true)
t.teardown(() => {
OUTPUT.length = 0
- config.long = false
+ config.set('long', false)
globRoot = null
})
@@ -140,11 +100,11 @@ test('npm help-search long output', t => {
test('npm help-search long output with color', t => {
globRoot = t.testdir(globDir)
- config.long = true
+ config.set('long', true)
npm.color = true
t.teardown(() => {
OUTPUT.length = 0
- config.long = false
+ config.set('long', false)
npm.color = false
globRoot = null
})
@@ -161,7 +121,8 @@ test('npm help-search long output with color', t => {
test('npm help-search no args', t => {
return helpSearch.exec([], (err) => {
- t.match(err, /npm help-search/, 'throws usage')
+ t.notOk(err)
+ t.match(OUTPUT, /npm help-search/, 'outputs usage')
t.end()
})
})
@@ -170,7 +131,6 @@ test('npm help-search no matches', t => {
globRoot = t.testdir(globDir)
t.teardown(() => {
OUTPUT.length = 0
- npmUsageArg = null
globRoot = null
})
@@ -178,7 +138,7 @@ test('npm help-search no matches', t => {
if (err)
throw err
- t.equal(npmUsageArg, false, 'called npmUsage for no matches')
+ t.match(OUTPUT, /No matches/)
t.end()
})
})
diff --git a/test/lib/help.js b/test/lib/help.js
index ae2f7e99d..ccf13a7e4 100644
--- a/test/lib/help.js
+++ b/test/lib/help.js
@@ -2,11 +2,6 @@ const { test } = require('tap')
const requireInject = require('require-inject')
const { EventEmitter } = require('events')
-let npmUsageArg = null
-const npmUsage = (npm, arg) => {
- npmUsageArg = arg
-}
-
const npmConfig = {
usage: false,
viewer: undefined,
@@ -16,6 +11,7 @@ const npmConfig = {
let helpSearchArgs = null
const OUTPUT = []
const npm = {
+ usage: 'test npm usage',
config: {
get: (key) => npmConfig[key],
set: (key, value) => {
@@ -48,7 +44,9 @@ const globDefaults = [
let globErr = null
let globResult = globDefaults
+let globParam
const glob = (p, cb) => {
+ globParam = p
return cb(globErr, globResult)
}
@@ -71,7 +69,6 @@ const openUrl = async (npm, url, msg) => {
}
const Help = requireInject('../../lib/help.js', {
- '../../lib/utils/npm-usage.js': npmUsage,
'../../lib/utils/open-url.js': openUrl,
child_process: {
spawn,
@@ -81,15 +78,11 @@ const Help = requireInject('../../lib/help.js', {
const help = new Help(npm)
test('npm help', t => {
- t.teardown(() => {
- npmUsageArg = null
- })
-
return help.exec([], (err) => {
if (err)
throw err
- t.equal(npmUsageArg, false, 'called npmUsage')
+ t.match(OUTPUT, ['test npm usage'], 'showed npm usage')
t.end()
})
})
@@ -107,22 +100,6 @@ test('npm help completion', async t => {
t.rejects(help.completion({ conf: { argv: { remain: [] } } }), /glob failed/, 'glob errors propagate')
})
-test('npm help -h', t => {
- npmConfig.usage = true
- t.teardown(() => {
- npmConfig.usage = false
- OUTPUT.length = 0
- })
-
- return help.exec(['help'], (err) => {
- if (err)
- throw err
-
- t.strictSame(OUTPUT, ['npm help <term>'], 'outputs usage information for command')
- t.end()
- })
-})
-
test('npm help multiple args calls search', t => {
t.teardown(() => {
helpSearchArgs = null
@@ -180,7 +157,7 @@ test('npm help whoami', t => {
throw err
t.equal(spawnBin, 'man', 'calls man by default')
- t.strictSame(spawnArgs, ['1', 'npm-whoami'], 'passes the correct arguments')
+ t.strictSame(spawnArgs, [globResult[0]], 'passes the correct arguments')
t.end()
})
})
@@ -212,12 +189,12 @@ test('npm help 5 install', t => {
npmConfig.viewer = 'browser'
globResult = [
'/root/man/man5/install.5',
- '/root/man/man1/npm-install.1',
]
t.teardown(() => {
npmConfig.viewer = undefined
globResult = globDefaults
+ globParam = null
spawnBin = null
spawnArgs = null
})
@@ -226,6 +203,7 @@ test('npm help 5 install', t => {
if (err)
throw err
+ t.match(globParam, /man5/, 'searches only in man5 folder')
t.match(openUrlArg, /configuring-npm(\/|\\)install.html$/, 'attempts to open the correct url')
t.end()
})
@@ -234,11 +212,11 @@ test('npm help 5 install', t => {
test('npm help 7 config', t => {
npmConfig.viewer = 'browser'
globResult = [
- '/root/man/man1/npm-config.1',
'/root/man/man7/config.7',
]
t.teardown(() => {
npmConfig.viewer = undefined
+ globParam = null
globResult = globDefaults
spawnBin = null
spawnArgs = null
@@ -248,49 +226,12 @@ test('npm help 7 config', t => {
if (err)
throw err
+ t.match(globParam, /man7/, 'searches only in man5 folder')
t.match(openUrlArg, /using-npm(\/|\\)config.html$/, 'attempts to open the correct url')
t.end()
})
})
-test('npm help with browser viewer and invalid section throws', t => {
- npmConfig.viewer = 'browser'
- globResult = [
- '/root/man/man1/npm-config.1',
- '/root/man/man7/config.7',
- '/root/man/man9/config.9',
- ]
- t.teardown(() => {
- npmConfig.viewer = undefined
- globResult = globDefaults
- spawnBin = null
- spawnArgs = null
- })
-
- return help.exec(['9', 'config'], (err) => {
- t.match(err, /invalid man section: 9/, 'throws appropriate error')
- t.end()
- })
-})
-
-test('npm help global redirects to folders', t => {
- globResult = ['/root/man/man5/folders.5']
- t.teardown(() => {
- globResult = globDefaults
- spawnBin = null
- spawnArgs = null
- })
-
- return help.exec(['global'], (err) => {
- if (err)
- throw err
-
- t.equal(spawnBin, 'man', 'calls man by default')
- t.strictSame(spawnArgs, ['5', 'folders'], 'passes the correct arguments')
- t.end()
- })
-})
-
test('npm help package.json redirects to package-json', t => {
globResult = ['/root/man/man5/package-json.5']
t.teardown(() => {
@@ -304,7 +245,8 @@ test('npm help package.json redirects to package-json', t => {
throw err
t.equal(spawnBin, 'man', 'calls man by default')
- t.strictSame(spawnArgs, ['5', 'package-json'], 'passes the correct arguments')
+ t.match(globParam, /package-json/, 'glob was asked to find package-json')
+ t.strictSame(spawnArgs, [globResult[0]], 'passes the correct arguments')
t.end()
})
})
@@ -327,7 +269,7 @@ test('npm help ?(un)star', t => {
throw err
t.equal(spawnBin, 'emacsclient', 'maps woman to emacs correctly')
- t.strictSame(spawnArgs, ['-e', `(woman-find-file '/root/man/man1/npm-unstar.1')`], 'passes the correct arguments')
+ t.strictSame(spawnArgs, ['-e', `(woman-find-file '/root/man/man1/npm-star.1')`], 'passes the correct arguments')
t.end()
})
})
@@ -350,7 +292,7 @@ test('npm help - woman viewer propagates errors', t => {
return help.exec(['?(un)star'], (err) => {
t.match(err, /help process exited with code: 1/, 'received the correct error')
t.equal(spawnBin, 'emacsclient', 'maps woman to emacs correctly')
- t.strictSame(spawnArgs, ['-e', `(woman-find-file '/root/man/man1/npm-unstar.1')`], 'passes the correct arguments')
+ t.strictSame(spawnArgs, ['-e', `(woman-find-file '/root/man/man1/npm-star.1')`], 'passes the correct arguments')
t.end()
})
})
@@ -372,7 +314,7 @@ test('npm help un*', t => {
throw err
t.equal(spawnBin, 'man', 'calls man by default')
- t.strictSame(spawnArgs, ['1', 'npm-unstar'], 'passes the correct arguments')
+ t.strictSame(spawnArgs, ['/root/man/man1/npm-uninstall.1'], 'passes the correct arguments')
t.end()
})
})
@@ -394,7 +336,7 @@ test('npm help - man viewer propagates errors', t => {
return help.exec(['un*'], (err) => {
t.match(err, /help process exited with code: 1/, 'received correct error')
t.equal(spawnBin, 'man', 'calls man by default')
- t.strictSame(spawnArgs, ['1', 'npm-unstar'], 'passes the correct arguments')
+ t.strictSame(spawnArgs, ['/root/man/man1/npm-uninstall.1'], 'passes the correct arguments')
t.end()
})
})
diff --git a/test/lib/load-all-commands.js b/test/lib/load-all-commands.js
index e31a2b993..2a2d41818 100644
--- a/test/lib/load-all-commands.js
+++ b/test/lib/load-all-commands.js
@@ -1,27 +1,35 @@
-// Thanks to nyc not working properly with proxies this
-// doesn't affect coverage. but it does ensure that every command has a usage
-// that contains its name, and if it has completion it is a function
-const npm = require('../../lib/npm.js')
+// Thanks to nyc not working properly with proxies this doesn't affect
+// coverage. but it does ensure that every command has a usage that contains
+// its name, a description, and if it has completion it is a function
+const requireInject = require('require-inject')
+const npm = requireInject('../../lib/npm.js')
const t = require('tap')
const { cmdList } = require('../../lib/utils/cmd-list.js')
-t.test('load npm', t => npm.load(er => {
- if (er)
- throw er
-}))
-
+let npmOutput = []
+npm.output = (msg) => {
+ npmOutput = msg
+}
t.test('load each command', t => {
- t.plan(cmdList.length)
- for (const cmd of cmdList.sort((a, b) => a.localeCompare(b))) {
- t.test(cmd, t => {
- const impl = npm.commands[cmd]
- if (impl.completion) {
- t.plan(3)
- t.isa(impl.completion, 'function', 'completion, if present, is a function')
- } else
- t.plan(2)
- t.isa(impl, 'function', 'implementation is a function')
- t.match(impl.usage, cmd, 'usage contains the command')
- })
- }
+ t.plan(cmdList.length + 1)
+ npm.load((er) => {
+ t.notOk(er)
+ npm.config.set('usage', true)
+ for (const cmd of cmdList.sort((a, b) => a.localeCompare(b))) {
+ t.test(cmd, t => {
+ const impl = npm.commands[cmd]
+ if (impl.completion)
+ t.isa(impl.completion, 'function', 'completion, if present, is a function')
+ t.isa(impl, 'function', 'implementation is a function')
+ t.ok(impl.description, 'implementation has a description')
+ t.ok(impl.name, 'implementation has a name')
+ t.match(impl.usage, cmd, 'usage contains the command')
+ impl([], (err) => {
+ t.notOk(err)
+ t.match(npmOutput, impl.usage, 'usage is output')
+ t.end()
+ })
+ })
+ }
+ })
})
diff --git a/test/lib/npm.js b/test/lib/npm.js
index dfb3cca64..eb0f8ab27 100644
--- a/test/lib/npm.js
+++ b/test/lib/npm.js
@@ -144,6 +144,7 @@ t.test('npm.load', t => {
t.equal(npm.loading, false, 'not loading yet')
const p = npm.load(first).then(() => {
+ t.ok(npm.usage, 'has usage')
npm.config.set('prefix', dir)
t.match(npm, {
loaded: true,
diff --git a/test/lib/run-script.js b/test/lib/run-script.js
index c598ea707..d2cac2f42 100644
--- a/test/lib/run-script.js
+++ b/test/lib/run-script.js
@@ -16,6 +16,11 @@ const npm = mockNpm({
localPrefix: __dirname,
flatOptions,
config,
+ commands: {
+ help: {
+ description: 'test help description',
+ },
+ },
output: (...msg) => output.push(msg),
})
@@ -259,20 +264,35 @@ t.test('try to run missing script', t => {
npm.localPrefix = t.testdir({
'package.json': JSON.stringify({
scripts: { hello: 'world' },
+ bin: { goodnight: 'moon' },
}),
})
t.test('no suggestions', t => {
runScript.exec(['notevenclose'], er => {
t.match(er, {
- message: 'missing script: notevenclose',
+ message: 'Unknown command: "notevenclose"',
})
t.end()
})
})
- t.test('suggestions', t => {
+ t.test('script suggestions', t => {
runScript.exec(['helo'], er => {
t.match(er, {
- message: 'missing script: helo\n\nDid you mean this?\n hello',
+ message: 'Unknown command: "helo"',
+ })
+ t.match(er, {
+ message: 'npm run hello',
+ })
+ t.end()
+ })
+ })
+ t.test('bin suggestions', t => {
+ runScript.exec(['goodneght'], er => {
+ t.match(er, {
+ message: 'Unknown command: "goodneght"',
+ })
+ t.match(er, {
+ message: 'npm exec goodnight',
})
t.end()
})
diff --git a/test/lib/utils/did-you-mean.js b/test/lib/utils/did-you-mean.js
index 0c9c95c7f..48b6d4027 100644
--- a/test/lib/utils/did-you-mean.js
+++ b/test/lib/utils/did-you-mean.js
@@ -1,7 +1,31 @@
const t = require('tap')
+const requireInject = require('require-inject')
+const npm = requireInject('../../../lib/npm.js')
+
const dym = require('../../../lib/utils/did-you-mean.js')
-t.equal(dym('asdfa', ['asdf', 'asfd', 'adfs', 'safd', 'foobarbaz', 'foobar']),
- '\nDid you mean this?\n asdf')
-t.equal(dym('asdfa', ['asdf', 'sdfa', 'foo', 'bar', 'fdsa']),
- '\nDid you mean one of these?\n asdf\n sdfa')
-t.equal(dym('asdfa', ['install', 'list', 'test']), '')
+t.test('did-you-mean', t => {
+ npm.load(err => {
+ t.notOk(err)
+ t.test('nistall', async t => {
+ const result = await dym(npm, 'nistall')
+ t.match(result, 'Unknown command')
+ t.match(result, 'npm install')
+ })
+ t.test('sttest', async t => {
+ const result = await dym(npm, 'sttest')
+ t.match(result, 'Unknown command')
+ t.match(result, 'npm test')
+ t.match(result, 'npm run posttest')
+ })
+ t.test('npz', async t => {
+ const result = await dym(npm, 'npxx')
+ t.match(result, 'Unknown command')
+ t.match(result, 'npm exec npx')
+ })
+ t.test('qwuijbo', async t => {
+ const result = await dym(npm, 'qwuijbo')
+ t.match(result, 'Unknown command')
+ })
+ t.end()
+ })
+})
diff --git a/test/lib/utils/npm-usage.js b/test/lib/utils/npm-usage.js
index fbc453811..ebf637ae1 100644
--- a/test/lib/utils/npm-usage.js
+++ b/test/lib/utils/npm-usage.js
@@ -1,12 +1,5 @@
const t = require('tap')
-
-const OUTPUT = []
-const output = (...msg) => OUTPUT.push(msg)
-const requireInject = require('require-inject')
-const usage = require('../../../lib/utils/npm-usage.js')
-
-const npm = requireInject('../../../lib/npm.js')
-npm.output = output
+const npm = require('../../../lib/npm.js')
t.test('usage', t => {
t.afterEach((cb) => {
@@ -29,61 +22,19 @@ t.test('usage', t => {
npm.config.set('userconfig', '/some/config/file/.npmrc')
t.test('basic usage', t => {
- usage(npm)
- t.equal(OUTPUT.length, 1)
- t.equal(OUTPUT[0].length, 1)
- t.matchSnapshot(OUTPUT[0][0])
- OUTPUT.length = 0
+ t.matchSnapshot(npm.usage)
t.end()
})
t.test('with browser', t => {
npm.config.set('viewer', 'browser')
- usage(npm)
- t.equal(OUTPUT.length, 1)
- t.equal(OUTPUT[0].length, 1)
- t.matchSnapshot(OUTPUT[0][0])
- OUTPUT.length = 0
- npm.config.set('viewer', null)
+ t.matchSnapshot(npm.usage)
t.end()
})
t.test('with long', t => {
npm.config.set('long', true)
- usage(npm)
- t.equal(OUTPUT.length, 1)
- t.equal(OUTPUT[0].length, 1)
- t.matchSnapshot(OUTPUT[0][0])
- OUTPUT.length = 0
- npm.config.set('long', false)
- t.end()
- })
-
- t.test('did you mean?', t => {
- npm.argv.push('unistnall')
- usage(npm)
- t.equal(OUTPUT.length, 2)
- t.equal(OUTPUT[0].length, 1)
- t.equal(OUTPUT[1].length, 1)
- t.matchSnapshot(OUTPUT[0][0])
- t.matchSnapshot(OUTPUT[1][0])
- OUTPUT.length = 0
- npm.argv.length = 0
- t.end()
- })
-
- t.test('did you mean?', t => {
- npm.argv.push('unistnall')
- const { exitCode } = process
- t.teardown(() => {
- if (t.passing())
- process.exitCode = exitCode
- })
- // make sure it fails when invalid
- usage(npm, false)
- t.equal(process.exitCode, 1)
- OUTPUT.length = 0
- npm.argv.length = 0
+ t.matchSnapshot(npm.usage)
t.end()
})
@@ -106,11 +57,7 @@ t.test('usage', t => {
configurable: true,
writable: true,
})
- usage(npm)
- t.equal(OUTPUT.length, 1)
- t.equal(OUTPUT[0].length, 1)
- t.matchSnapshot(OUTPUT[0][0])
- OUTPUT.length = 0
+ t.matchSnapshot(npm.usage)
t.end()
})
}