jmd-scripts
Version:
CLI for common scripts for my projects
73 lines (64 loc) • 2.13 kB
JavaScript
;
var _jestInCase = _interopRequireDefault(require("jest-in-case"));
var _serializers = require("./helpers/serializers");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
expect.addSnapshotSerializer(_serializers.unquoteSerializer);
expect.addSnapshotSerializer(_serializers.winPathSerializer);
(0, _jestInCase.default)('precommit', ({
args = [],
utils = require('../../utils'),
hasPkgProp = () => false,
hasFile = () => false
}) => {
// beforeEach
const {
sync: crossSpawnSyncMock
} = require('cross-spawn');
const originalArgv = process.argv;
const originalExit = process.exit;
Object.assign(utils, {
hasPkgProp,
hasFile,
resolveBin: (modName, {
executable = modName
} = {}) => executable
});
process.exit = jest.fn();
process.argv = ['node', '../precommit', ...args];
utils.isOptedIn = optIn => optIn === 'pre-commit';
crossSpawnSyncMock.mockClear();
try {
// tests
require('../precommit');
expect(crossSpawnSyncMock).toHaveBeenCalledTimes(2);
const [firstCall, secondCall] = crossSpawnSyncMock.mock.calls;
const [scriptOne, calledArgsOne] = firstCall;
expect([scriptOne, ...calledArgsOne].join(' ')).toMatchSnapshot();
const [scriptTwo, calledArgsTwo] = secondCall;
expect([scriptTwo, ...calledArgsTwo].join(' ')).toMatchSnapshot();
} catch (error) {
throw error;
} finally {
// afterEach
process.exit = originalExit;
process.argv = originalArgv;
jest.resetModules();
}
}, {
'calls lint-staged CLI with default args': {},
'does not use built-in config with --config': {
args: ['--config', './custom-config.js']
},
'does not use built-in config with .lintstagedrc file': {
hasFile: filename => filename === '.lintstagedrc'
},
'does not use built-in config with lint-staged.config.js file': {
hasFile: filename => filename === 'lint-staged.config.js'
},
'does not use built-in config with lint-staged pkg prop': {
hasPkgProp: prop => prop === 'lint-staged'
},
'forwards args': {
args: ['--verbose']
}
});