为什么不能向Postman添加简单的可重用功能?

时间:2019-03-26 18:37:19

标签: javascript postman

在邮递员中,我试图实现以下目标:

  1. 在集合中:
    1. 创建一个包含可重用函数的实用程序对象
    2. 将该实用程序对象存储在全局变量中,以供以后在请求测试脚本中使用。
  2. 在请求中:
    1. 将实用程序对象代码从全局变量中拉出。
    2. 评估代码并将结果实用程序对象实例存储在局部变量中。
    3. 在实用程序对象实例上调用方法。

不过,我见过的遍布网络的许多实现似乎都不起作用。我可以一直进行到步骤2.2,然后事情死于可怕的燃烧死亡。 Postman下的JavaScript引擎拒绝评估存储在globals集合中的对象。

为找出问题,我将其简化为一个最小的脚本,该脚本放置在我的收藏集的请求前脚本中:

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 + ')');

但是总是会发生以下错误:

  

评估测试脚本时出错:SyntaxError:   意外令牌;

我尝试过:

  • 将整个函数转换为多行字符串,并将其存储在全局环境中。发生相同的错误。
  • 直接在函数体中包含括号。那也不起作用。
  • 使用lambda表达式,但这在编辑器本身中引起了各种问题。

我确定这是简单,愚蠢且显而易见的事情,而且我只是没有看到它。

有人可以指出我在这里做错了吗?

P.S。正如建议的here on StackOverflowPostman forums on GitHub那样,这应该是可能的(尽管它需要滚动一些注释才能看到解决方案)。

1 个答案:

答案 0 :(得分:2)

您将两个语句存储为字符串,并用分号分隔:

 "function utils() { /*...*/ }; utils()"

然后将字符串包装在括号中并尝试执行:

eval("(function { /*...*/ }; utils())")

无效,因为表达式内的;是语法错误。

您要么删除括号,用冒号代替分号,要么使用IIFE(我在这里赞成):

eval("(" + someFunc + ")()");