Jest - фиктивная функция в пакете child_process - PullRequest
0 голосов
/ 08 мая 2018

Я пишу модульные тесты и для того, чтобы смоделировать метод 'exec' в пакете 'child_process'.

__ издевается __ / child_process.js

const child_process = jest.genMockFromModule('child_process');
child_process.exec = jest.fn()

module.exports = child_process;

Это тестовый файл:

const fs = require('fs-extra'),
      child_process = require('child_process'),
      runCassandraMigration = require('../../lib/runCassandraMigration.js')

const defaultArguments = () => {
  return {
    migration_script_path: './home',
    logger: {
      error: function () {}
    }
  };
}

jest.mock("fs-extra")
jest.mock("child_process")

describe('Running cassandra migration tests', function () {
  describe('successful flow', function () {
    it('Should pass without any errors ', async function () {
        let args = defaultArguments();
        let loggerSpy = jest.spyOn(args.logger, 'error')

        fs.remove.mockImplementation(() => {Promise.resolve()})
        child_process.exec.mockImplementation(() => {Promise.resolve()})

        await runCassandraMigration(args.migration_script_path, args.logger)
    });
  });

Когда я запускаю тест, я получаю следующую ошибку:

child_process.exec.mockImplementation is not a function

Модуль, который я тестирую

const fs = require('fs-extra')
const promisify = require('util').promisify
const execAsync = promisify(require('child_process').exec)

module.exports = async (migration_script_path, logger) => {
  try {
    console.log()
    const {stdout, stderr} = await execAsync(`cassandra-migration ${migration_script_path}`)
    logger.info({stdout: stdout, stderr: stderr}, 'Finished runing cassandra migration')
    await fs.remove(migration_script_path)
  } catch (e) {
    logger.error(e, 'Failed to run cassandra migration')
    throw Error()
  }
}

Пожалуйста, сообщите.

...