@interaktiv/dia-scripts
Version:
CLI toolbox with common scripts for most sort of projects at DIA
71 lines (65 loc) • 2.32 kB
JavaScript
;
var _serializers = require("./__tests__/helpers/serializers");
expect.addSnapshotSerializer(_serializers.unquoteSerializer);
expect.addSnapshotSerializer(_serializers.winPathSerializer);
let crossSpawnSyncMock, originalArgv, originalExit;
describe('pre-commit', () => {
beforeEach(() => {
({
sync: crossSpawnSyncMock
} = require('cross-spawn'));
originalArgv = process.argv;
originalExit = process.exit;
process.exit = jest.fn();
});
afterEach(() => {
process.exit = originalExit;
process.argv = originalArgv;
jest.resetModules();
});
it.each`
title | params
${'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']
}}
`('$title', ({
params = {}
}) => {
const {
args = [],
utils = require('../utils'),
hasPkgProp = () => false,
hasFile = () => false
} = params;
Object.assign(utils, {
hasPkgProp,
hasFile,
resolveBin: (modName, {
executable = modName
} = {}) => executable
});
process.argv = ['node', '../pre-commit', ...args];
utils.isOptedIn = optIn => optIn === 'pre-commit';
utils.isOptedOut = optOut => optOut !== 'pre-commit';
require('./pre-commit');
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();
});
});