javascript - 如何判断是否调用了另一个对象方法
问题描述
我有我的函数对象,我想测试一个方法是否调用了另一个方法,但是 spy 似乎失败了,因为测试表明这是因为该函数根本没有被调用。我正在添加代码。
index.js
const funcObject = () => {
const firstFunc = () => {
console.log('first func!')
};
const secondFunc = () => {
firstFunc();
console.log('second func!');
}
return {
firstFunc,
secondFunc
};
};
module.exports = funcObject;
index.test.js
const funcObject = require('./index');
describe('second func tests', () => {
it('should call first func', () => {
const funcObjectOutput = funcObject();
const firstFuncSpy = jest.spyOn(funcObjectOutput, 'firstFunc');
funcObjectOutput.secondFunc();
expect(firstFuncSpy).toHaveBeenCalled();
})
})
包.json
{
"name": "jest-mock",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "jest"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/jest": "^26.0.20",
"jest": "^26.6.3"
}
}
解决方案
jest.spyOn(funcObjectOutput, 'firstFunc')
替换funcObjectOutput['firstFunc']
为模拟函数。firstFuncSpy
模拟的而不是原始的也是如此。并expect(firstFuncSpy).toHaveBeenCalled()
检查是否已调用模拟函数。而是secondFunc
调用原来的firstFunc
。
见代码jest.spyOn
。
https://github.com/facebook/jest/blob/dd1309652334ab14544cf3ecb177faae68059832/packages/jest-mock/src/index.ts#L951
推荐阅读
- r - 将命名行添加到 R 中的 data.frame
- javascript - 如何让我的 if 语句在我的游戏中发挥作用?
- python - 为什么类型(对象)返回
代替 ? - python - scipy.sparse.coo_matrix 上的元素操作(例如模)?
- oracle - Oracle 查询 - 计算日期和时间差 - 重叠
- flutter - Flutter:Flutter Emulator 无法打开相机(flutter_emulator:5554)
- python - sqlite ImportError:没有名为_sqlite3 Google App Engine的模块
- docker - docker内的Nginx反向代理不支持上游的端口设置
- r - 在 R 中模拟动态范围以按任意函数进行过滤
- xamarin - 如何在触发按钮 15 秒后使标签不可见?