首页 > 解决方案 > 用 Jest 模拟 shelljs - [TypeError: shell.exec 不是函数]

问题描述

正如我之前关于模拟的问题中提到的,我是 Jest 和测试的新手,我似乎得到了一些曲线球。

这一次,我在 CLI 应用程序中模拟时遇到了麻烦shelljs

Automockingjest.mock('shelljs');不起作用并报错为:[TypeError: shell.exec is not a function]

所以我继续尝试使用mockImplementation()

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

令我惊讶的是,我仍然收到相同的错误消息

任何指针都会非常感激。

2020 年 8 月 4 日更新

根据下面 Teneff 的回复,嘲讽适用于:

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

现在我正在超时,因为我对 shell.exec() 的调用是异步的,并且有一个回调来解决我的承诺。

我的目标是模拟 shell.exec() 来解决承诺,但它会等待并且 Jest 超时。

标签: javascriptnode.jsunit-testingtestingjestjs

解决方案


当您shell用作具有.exec属性的对象时,您的 jest.mock 工厂函数应该返回一个具有 exec 属性的对象

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

推荐阅读