forked from npm/cli
-
Notifications
You must be signed in to change notification settings - Fork 0
/
load-all-commands.js
37 lines (36 loc) · 1.68 KB
/
load-all-commands.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Our coverage mapping means that stuff like this doen't count for coverage.
// It does ensure that every command has a usage that renders, contains its
// name, a description, and if it has completion it is a function. That it
// renders also ensures that any params we've defined in our commands work.
const t = require('tap')
const util = require('util')
const { load: loadMockNpm } = require('../fixtures/mock-npm.js')
const { allCommands } = require('../../lib/utils/cmd-list.js')
t.test('load each command', async t => {
for (const cmd of allCommands) {
t.test(cmd, async t => {
const { npm, outputs } = await loadMockNpm(t, {
config: { usage: true },
})
const impl = await npm.cmd(cmd)
if (impl.completion) {
t.type(impl.completion, 'function', 'completion, if present, is a function')
}
t.type(impl.exec, 'function', 'implementation has an exec function')
t.type(impl.execWorkspaces, 'function', 'implementation has an execWorkspaces function')
t.equal(util.inspect(impl.exec), '[AsyncFunction: exec]', 'exec function is async')
t.equal(
util.inspect(impl.execWorkspaces),
'[AsyncFunction: execWorkspaces]',
'execWorkspaces function is async'
)
t.ok(impl.description, 'implementation has a description')
t.ok(impl.name, 'implementation has a name')
t.equal(cmd, impl.name, 'command list and name are the same')
t.ok(impl.ignoreImplicitWorkspace !== undefined, 'implementation has ignoreImplictWorkspace')
t.match(impl.usage, cmd, 'usage contains the command')
await npm.exec(cmd, [])
t.match(outputs[0][0], impl.usage, 'usage is what is output')
})
}
})