Jest не может проверить функцию помощи командира - PullRequest
0 голосов
/ 31 января 2020

С jest Я не могу проверить commander функции модуля, которые приводят к завершению процесса.

Например, если я передам опцию --help или недопустимый параметр, такой как -x (см. ниже) process.exit или process.stdout.write не вызываются так, как они должны смотреть на источники commander.

import {Command} from "commander";

let mockExit: jest.SpyInstance;
let mockStdout: jest.SpyInstance;

beforeAll(() => {
    mockExit = jest.spyOn(process, "exit").mockImplementation();
    mockStdout = jest.spyOn(process.stdout, "write").mockImplementation();
});
afterAll(() => {
    mockExit.mockRestore();
    mockStdout.mockRestore();
});
test("Ask for help", () => {

    // Setup
    const save = JSON.parse(JSON.stringify(process.argv));
    process.argv = ["--help"]; // Same setting it to "-x"

    const program = new Command();
    program
        .option("-v, --verbose [level]", "verbose level")
        .parse(process.argv);

    expect(mockExit).toBeCalled();
    // expect(mockStdout).toBeCalled();

    // Cleanup
    process.argv = save;
});

Что странно в том, что из поведения других тестов process.argv не восстановлен после этого. Тесты в машинописи и прошли через ts-jest. Любые идеи? Спасибо!

1 Ответ

0 голосов
/ 31 января 2020

Я предлагаю вам использовать .exitOverride(), который Commander использует в своих собственных тестах. Это означает, что раннее «завершение» происходит через бросок, а не выход.

Первая проблема, хотя ( из комментариев) есть аргументы. Commander ожидает, что аргументы разбора будут следовать соглашениям узла, где argv [0] - это приложение, а argv [1] - запускаемый скрипт с параметрами пользователя после этого.

Поэтому вместо:

argsToParse = ["--help"];

что-то вроде:

argsToParse = ['node", "dummy.js", "--help"];

(нет необходимости изменять process.argv как таковой.)

...