Пример #1
0
  it('should exit when erroring', async () => {
    const processCWD = jest.fn();
    const processExit = jest.fn();
    const consoleError = jest.fn();
    const mockConsoleError = jest
      .spyOn(console, 'error')
      .mockImplementation(consoleError);
    const mockCWD = jest.spyOn(process, 'cwd').mockImplementation(processCWD);
    const mockExit = jest
      .spyOn(process, 'exit')
      .mockImplementation(processExit);

    jest.doMock('./services/_autoload', () => {
      return options(
        { singleton: true },
        service(async () => $autoload, '$autoload'),
      );
    });

    $autoload.mockResolvedValueOnce({});
    $autoload.mockResolvedValueOnce({
      initializer: service(
        async () => async () => {
          throw new Error('E_ERROR');
        },
        'commandHandler',
        ['log'],
      ),
      path: 'mocked://service',
    });
    processCWD.mockReturnValueOnce('/home/whoiam/projects/my-cool-project');

    const run = require('./index').default;
    const $ = new Knifecycle();

    $.register(constant('log', log));

    await run({ prepareEnvironment: () => $ });

    mockCWD.mockRestore();
    mockExit.mockRestore();
    mockConsoleError.mockRestore();

    expect({
      exitCalls: processExit.mock.calls,
      cwdCalls: processCWD.mock.calls,
      errorCalls: consoleError.mock.calls.map(([arg1]) => [arg1]),
      autoloaderCalls: $autoload.mock.calls,
      logCalls: log.mock.calls.filter(args => 'stack' !== args[0]),
    }).toMatchSnapshot();
  });
Пример #2
0
  it('should run commands', async () => {
    const processCWD = jest.fn();
    const processExit = jest.fn();
    const mockCWD = jest.spyOn(process, 'cwd').mockImplementation(processCWD);
    const mockExit = jest
      .spyOn(process, 'exit')
      .mockImplementation(processExit);

    jest.doMock('./services/_autoload', () => {
      return options(
        { singleton: true },
        service(async () => $autoload, '$autoload'),
      );
    });

    $autoload.mockResolvedValueOnce({
      initializer: service(
        async ({ log }) => async () => log('warning', 'Command ran!'),
        'commandHandler',
        ['log'],
      ),
      path: 'mocked://command',
    });
    $autoload.mockResolvedValueOnce({
      initializer: constant('COMMAND_DEFINITION', {
        arguments: { properties: {} },
      }),
      path: 'mocked://definition',
    });
    processCWD.mockReturnValueOnce('/home/whoiam/projects/my-cool-project');

    const run = require('./index').default;
    const $ = new Knifecycle();

    $.register(constant('log', log));

    await run({ prepareEnvironment: () => $ });

    mockCWD.mockRestore();
    mockExit.mockRestore();

    expect({
      exitCalls: processExit.mock.calls,
      cwdCalls: processCWD.mock.calls,
      autoloaderCalls: $autoload.mock.calls,
      logCalls: log.mock.calls.filter(args => 'stack' !== args[0]),
    }).toMatchSnapshot();
  });
Пример #3
0
export async function runCreateWhook() {
  try {
    const $ = new Knifecycle();

    $.register(constant('CWD', process.cwd()));
    $.register(constant('require', _require));
    $.register(constant('inquirer', inquirer));
    $.register(constant('exec', _exec));
    $.register(constant('writeFile', _writeFile));
    $.register(constant('readFile', _readFile));
    $.register(constant('copy', _copy));
    $.register(constant('ensureDir', _ensureDir));
    $.register(
      constant(
        'SOURCE_DIR',
        path.resolve(path.dirname(require.resolve('@whook/example')), '..'),
      ),
    );
    $.register(constant('debug', debug('whook')));
    $.register(
      constant('logger', {
        // eslint-disable-next-line
        error: console.error.bind(console),
        // eslint-disable-next-line
        info: console.info.bind(console),
        // eslint-disable-next-line
        warning: console.log.bind(console),
      }),
    );
    $.register(initLogService);
    $.register(initLockService);
    $.register(initDelayService);
    $.register(initAuthor);
    $.register(initProject);
    $.register(initCreateWhook);

    const { createWhook } = await $.run(['createWhook']);

    await createWhook();
  } catch (err) {
    // eslint-disable-next-line
    console.error('💀 - Cannot launch the process:', err.stack);
    process.exit(1);
  }
}