UNPKG

jmd-scripts

Version:

CLI for common scripts for my projects

100 lines (88 loc) 2.57 kB
"use strict"; var _path = _interopRequireDefault(require("path")); var _slash = _interopRequireDefault(require("slash")); var _jestInCase = _interopRequireDefault(require("jest-in-case")); var _serializers = require("../scripts/__tests__/helpers/serializers"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const projectRoot = _path.default.join(__dirname, '../../'); expect.addSnapshotSerializer(_serializers.unquoteSerializer); expect.addSnapshotSerializer({ print: val => (0, _slash.default)(val.replace(projectRoot, '<PROJECT_ROOT>/')), test: val => typeof val === 'string' && val.includes(projectRoot) }); (0, _jestInCase.default)('format', ({ snapshotLog = false, throws = false, signal = false, args = [] }) => { // beforeEach const { sync: crossSpawnSyncMock } = require('cross-spawn'); const originalExit = process.exit; const originalArgv = process.argv; const originalLog = console.log; process.exit = jest.fn(); console.log = jest.fn(); try { // tests process.argv = ['node', '../', ...args]; crossSpawnSyncMock.mockClear(); if (signal) { crossSpawnSyncMock.mockReturnValueOnce({ result: 1, signal }); } require('../'); if (snapshotLog) { expect(console.log.mock.calls).toMatchSnapshot(); } else if (signal) { expect(process.exit).toHaveBeenCalledTimes(1); expect(process.exit).toHaveBeenCalledWith(1); expect(console.log.mock.calls).toMatchSnapshot(); } else { expect(crossSpawnSyncMock).toHaveBeenCalledTimes(1); const [firstCall] = crossSpawnSyncMock.mock.calls; const [script, calledArgs] = firstCall; expect([script, ...calledArgs].join(' ')).toMatchSnapshot(); } } catch (error) { if (throws) { expect(error.message).toMatchSnapshot(); } else { throw error; } } finally { // afterEach process.exit = originalExit; process.argv = originalArgv; console.log = originalLog; jest.resetModules(); } }, { 'calls node with the script path and args': { args: ['test', '--no-watch'] }, 'throws unknown script': { args: ['unknown-script'], throws: true }, 'logs help with no args': { snapshotLog: true }, 'logs for SIGKILL signal': { args: ['lint'], signal: 'SIGKILL' }, 'logs for SIGTERM signal': { args: ['build'], signal: 'SIGTERM' }, 'does not log for other signals': { args: ['test'], signal: 'SIGBREAK' } }); /* eslint complexity:0 */