在 Postman 中,我试图实现以下目标:
- 在集合中:
- 创建包含可重用函数的实用程序对象
- 将该实用程序对象存储在全局变量中,以便稍后在请求测试脚本中使用。
- 在请求中:
- 从全局变量中提取实用程序对象代码。
- 评估代码并将生成的实用程序对象实例存储在局部变量中。
- 调用实用程序对象实例的方法。
不过,我在网络上看到的许多实现似乎都不起作用。我可以一路下降到步骤 2.2,然后事情就会可怕地燃烧殆尽。 Postman 下的 JavaScript 引擎拒绝评估存储在全局集合中的对象。
为了隔离该问题,我已将其精简为最低限度的脚本,并将其放置在我的集合的预请求脚本中:
postman.setGlobalVariable("loadUtils", function utils() {
let utils = {};
utils.main = function() {
console.log("Hello, world!");
}
return utils;
} + ';utils()');
然后我尝试按如下方式加载此脚本:
var code = globals.loadUtils;
console.log(code);
var utils = eval('(' + code + ')');
但总是出现以下错误:
There was an error in evaluating the test script: SyntaxError: Unexpected token ;
我尝试过:
- 将整个函数转换为多行字符串并将结果存储在全局环境中。发生了同样的错误。
- 直接在函数体中包含括号。这也行不通。
- 使用 lambda 表达式,但这会导致编辑器本身出现各种问题。
我确信这是一件简单、愚蠢且显而易见的事情,但我只是没有看到它。
有人可以指出我在这里做错了什么吗?
附注正如 here on StackOverflow 和 Postman forums on GitHub 所建议的那样,这应该是可能的(尽管需要滚动浏览评论才能看到解决方案)。
最佳答案
您将两个语句存储为字符串,并用分号分隔:
"function utils() { /*...*/ }; utils()"
然后将该字符串括在括号中并尝试执行它:
eval("(function { /*...*/ }; utils())")
这是行不通的,因为表达式内部的 ;
是一个语法错误。
您可以删除括号,用冒号替换分号或使用 IIFE(我在这里更喜欢):
eval("(" + someFunc + ")()");
关于javascript - 为什么我不能向 Postman 添加简单的可重用功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55364125/