node.js - 如何使用 jest.spyOn 函数来测试另一个文件中的函数
问题描述
我正在尝试运行测试用例来测试我的 Web 服务的入口点,我在运行单元测试时遇到了一个问题。无法监视异步函数,因为它是属性而不是函数。
我正在尝试测试是否在 server.js 文件中调用了 run 函数
入口文件有点像下面。
import config from 'config';
export default async function run() {
try {
/*
some code
*/
} catch (err) {
process.exit(1);
}
}
run();
测试文件如下
import run from '../server';
describe('server-test', () => {
it('run', async () => {
const start = require('../server');
const spy = jest.spyOn(start, run);
await run();
expect(spy).toBeCalled();
});
});
测试应该可以正常运行,但是在运行此测试时出现以下错误
Cannot spy the async function run() {
try {
/*
some code.
*/
} catch (err) {
process.exit(1);
}
} property because it is not a function; undefined given instead
解决方案
我为此错误研究了很长时间,并在以下帖子中结束了 如何使用 Jest 监视默认导出的函数?
因此,在不放弃 default 关键字(即 ES 6 lint 所需)的情况下,唯一的解决方案是使用 'default' 词代替 'run'。
有点像这样使用。
const spy = jest.spyOn(start, 'default');
它应该工作。
推荐阅读
- javascript - 将 Ajax 成功数据存储到 javascript 变量中以在其他 js 函数中使用
- python - 如何使用 Python 和 Pytest 比较和测试字典列表中的特定键
- r - 通过 bash/batch 文件访问 Oauth Token
- combinations - 给定每个数字值范围的可能数字
- javascript - 有没有一种使用 Vue 路由器将 props 传递给父组件的好方法?
- python-3.x - 在两个摄像头上进行人脸识别
- reactjs - ReactJS - 根据场景渲染特定组件
- python - 如何使用 python selenium 查找 Youtube 视频时长?
- javascript - 音频对象持续时间不断变化?
- ios - 更改代码中的纵横比值