Дразнящая оболочка js с Jest - [TypeError: shell.exe c не является функцией] - PullRequest
0 голосов
/ 07 апреля 2020

Как уже упоминалось в моем предыдущем вопросе о насмешках, я новичок в Jest и тестировании, и у меня, похоже, появляются какие-то кривые.

В этот раз у меня возникают проблемы с насмешками shelljs в моем приложении CLI.

Автоматическая блокировка jest.mock('shelljs'); не работала и выдавала ошибку: [TypeError: shell.exe c не является функцией]

Поэтому я продолжил и попытался использовать mockImplementation()

jest.mock('shelljs', () => {
  return jest.fn().mockImplementation(() => {
    return {
      exec: () => {}
    };
  });
});

К моему удивлению, я все еще получаю то же сообщение об ошибке

Любые указатели были бы очень благодарны.

ОБНОВЛЕНИЕ 08/04/2020 :

В соответствии с ответом Тенеффа ниже, насмешка отлично работает с:

jest.mock('shelljs', () => {
  return {
    exec: jest.fn()
  };
});

Теперь я получаю тайм-ауты, так как мой вызов shell.exe c () asyn c и получаю ответный вызов, который разрешает мое обещание.

Моя цель - смоделировать shell.exe c (), чтобы просто выполнить обещание, но оно переходит в ожидание, а Jest останавливается.

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Взяв на борт ответ Тенефа, я понял, что тайм-аут случается, потому что я успешно издевался shell.exec, однако я использовал его asyn c версия exec(command [, options] [, callback]), поэтому я попытался сначала выйти из системы аргументов, и это сработало.

Осталось все сделать, чтобы позвонить и вуаля, мой тест работает.

jest.mock('shelljs', () => {
  return {
    exec: jest.fn((_, __, callback) => callback())
  };
});
0 голосов
/ 07 апреля 2020

Поскольку вы используете shell в качестве объекта со свойством .exec, ваша фабричная функция jest.mock должна вернуть объект со свойством exe c

jest.mock('shelljs', () => {
  return { exec: jest.fn() }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...