Ложный вывод команды оболочки в Jest - PullRequest
0 голосов
/ 22 февраля 2019

Я пишу инструмент Cli и пытаюсь написать тесты для него в Jest.У меня есть некоторые функции, которые вызывают git, но мне нужно смоделировать результаты этих вызовов, иначе они не будут согласованными.

Код, который я использую для вызова оболочки, выглядит следующим образом.

import { exec } from "child_process";

function execute(command) {
  return new Promise((resolve, reject) => {
    exec(command, resolve);
  });
}

export const getGitDiff = function () {
  return execute("git diff")
};

Как мне написать тест для этого в Jest?

То, что я пробовал, было

import { getGitDiff } from './getGitDiff';

describe('get git diff', () => {
  it('should send "git diff" to stdin', () => {
    const spy = jest.spyOn(process.stdin, 'write');
    return getGitDiff().then(() => {
      expect(spy).toHaveBeenCalled();
    })
  });
});

1 Ответ

0 голосов
/ 22 февраля 2019

Я закончил тем, что создал новый файл с именем child_process.js и использовал функциональность genMockFromModule в Jest для заглушки всего модуля и переопределил некоторые функции, подобные этой

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

const mockOutput = {}

const exec = jest.fn().mockImplementation((command, resolve) => {
    resolve(mockOutput[command]);
})

const __setResponse = (command, string) => {
    mockOutput[command] = string;
}

child_process.exec = exec
child_process.__setResponse = __setResponse;

module.exports = child_process;

, и у меня есть тесткак

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

const mockOutput = {}

const exec = jest.fn().mockImplementation((command, resolve) => {
    resolve(mockOutput[command]);
})

const __setResponse = (command, string) => {
    mockOutput[command] = string;
}

child_process.exec = exec
child_process.__setResponse = __setResponse;

module.exports = child_process;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...