Postman全局存储Helper类调用方法报not a function错误求助
问题根本原因
Postman的全局变量(pm.globals)存储变量时,会自动将变量序列化为JSON格式字符串,JSON本身只支持存储普通数据类型(字符串、数字、布尔值、数组、普通对象),函数、原型链、类实例的特殊属性都会在序列化过程中被丢弃。
你从pm.globals中get到的HELPER只是一个和原类实例属性相同的普通对象,没有继承Helper类的原型方法,所以调用checkIfEmpty会提示不是函数。
可行解决方案
- 方案1:仅存储数据到全局变量,每次使用时重新实例化Helper类
存数据时的写法:
取数据时的写法:const helperInstance = new Helper() // 仅把需要持久化的属性提取出来存到全局 pm.globals.set('HELPER_DATA', JSON.stringify({ mandatory: helperInstance.mandatory // 其他需要持久化的属性都放在这里 }))const helperData = pm.globals.get('HELPER_DATA') ? JSON.parse(pm.globals.get('HELPER_DATA')) : {} // 重新实例化类,自动挂载所有方法 const HELPER = new Helper(helperData) console.log(HELPER.mandatory); console.log(HELPER.checkIfEmpty()); - 方案2:把Helper类的定义放在集合级别的pre-request脚本中
集合级别的脚本会在该集合下所有请求执行前自动加载,你不需要把类实例存在全局变量中,直接在请求脚本中实例化Helper类即可,完全避开序列化丢方法的问题。 - 方案3(不推荐):将方法转为字符串存储,取出后手动还原
可以把类的方法转成字符串存入全局,取出后用eval或者new Function还原,但这种方式有安全隐患,且维护成本很高,不建议使用。
内容的提问来源于stack exchange,提问作者Fpasquer
相关产品推荐
相关产品推荐

