javascript - 如何使用 Jest 在函数内测试类实例
问题描述
我有以下假设情况:
// file MyClass.js in an external package
class MyClass {
myfunc = () => {
// do something
}
}
// file in my project
function myFunctionToBeTested() {
const instance = new MyClass()
instance.myFunc()
}
我需要用 Jest 创建一个测试,确保instance.myFunc
被调用
解决方案
一种选择是用模拟实现替换 MyClass 模块
const mockmyfunc = jest.fn()
jest.mock("path/to/external/package/MyClass", () => {
return jest.fn().mockImplementation(() => {
return {myfunc: mockmyfunc}
})
})
然后编写以下测试
it("Test myfunc called in functionToBeTested", () => {
functionToBeTested()
expect(mockmyfunc).toHaveBeenCalled()
})
请注意,这不是唯一的方法,您可以深入了解https://facebook.github.io/jest/docs/en/es6-class-mocks.html以获取其他选择。
更新
如果 myfunc 是一个实际的函数(我猜这不是一个选项,因为它是外部包?)
export class MyClass {
myFunc() {
// do smth
}
}
并且您不需要替换实现,您可以使用 jest 的 automock
import MyClass from "path/to/external/package/MyClass"
jest.mock("path/to/external/package/MyClass")
it("Test myfunc called in functionToBeTested", () => {
functionToBeTested()
const mockMyFunc = MyClass.mock.instances[0].myFunc
expect(mockMyFunc).toHaveBeenCalled()
})
推荐阅读
- webots - 是否有任何 api 用于在 webbots 中设置特定机器人的初始位置和旋转
- javascript - bootstrap-grid 是否使用 jquery?
- java - Java 8 Sort HashMap,其中映射键是
- postgresql - pgadmin4 卡在 indefinet 加载屏幕中——Ubuntu 18.04
- angular - Angular 7 PWA 中的路由问题
- eslint - 如何修复“重构此函数以始终使用“返回”。来自声纳 js
- ios - 仅 Testflight 的应用程序是否需要在 2020 年 4 月之前更新以支持 iOS 13 SDK?
- javascript - 从 api 调用中检索到的数据更新 html
- asp.net-core - “对象”不包含定义
在 asp.net 核心 3.1 - javascript - 为什么我需要在 Express 中将 (req, res, next) 传递给 bodyParser?