UNPKG

jmd-scripts

Version:

CLI for common scripts for my projects

73 lines (64 loc) 2.13 kB
"use strict"; 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'] } });