javascript - 用 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 超时。
解决方案
当您shell
用作具有.exec
属性的对象时,您的 jest.mock 工厂函数应该返回一个具有 exec 属性的对象
jest.mock('shelljs', () => {
return { exec: jest.fn() }
});
推荐阅读
- amazon-web-services - 为什么我应该使用 IAM 角色?
- docker - Docker-compose 多个端口暴露
- python - matplotlib geopandas 用颜色方案的设置箱绘制叶绿素
- mongodb - 由于 src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp 365 处的致命断言 28558,MongoDB docker 构建失败
- sql - match_recognize 是否可以选择保留所有原始行并标记匹配项?
- sql-server - 多个线程使用实体框架从同一个表中读取唯一记录
- requirejs - 如何修复'错误:尚未为上下文加载模块名称“xxxxx”:_。使用带有 CoreJS 的 amd 模块转换时使用 require([])'
- ruby-on-rails - ActiveStorage 文件上传更改在使用其他属性更新时不起作用
- sql - 如何使用 NOW() 函数作为范围的上限?
- c++ - Visual Studio 中的混合语言