Приложения CLI Node.js ничем не отличаются от других приложений, за исключением зависимости от среды. Предполагается, что они широко используют process
участников, например ::1002 *.
process.stdin
process.stdout
process.argv
process.exit
Если какие-либо из этих вещей используются, они должны быть проверены и протестированы соответственно.
Поскольку console.log
вызывается напрямую для вывода, нет проблем с его непосредственным шпионажем, хотя можно использовать и вспомогательные пакеты, такие как test-console
.
В этом случае process.exit(0)
вызывается в импортированном файле, поэтому файл спецификаций преждевременно завершается, а следующий Done
вывод - из родительского процесса. Это должно быть заглушки. Выдача ошибки необходима, чтобы выполнение кода было остановлено - для имитации нормального поведения:
test('Attempt 2', () => {
const spy = jest.spyOn(console, 'log');
jest.spyOn(process, 'exit').mockImplementationOnce(() => {
throw new Error('process.exit() was called.')
});
expect(() => {
require('./cli.js');
}).toThrow('process.exit() was called.');
expect(spy.mock.calls).toEqual([['Testing...']]);
expect(process.exit).toHaveBeenCalledWith(0);
});