在js函数中使用调用读取功能

时间:2019-07-31 13:54:10

标签: karate

我有一个小问题要解决。我有以下几行代码可创建2个有效的用户。但是问题是,它从代码的第一行创建了两个具有相同ID的用户:

  • def myId =调用read('classpath:karate / helpers / guid.js')

  • def users = function(){karate.call('classpath:v1 / api_CreateUser.feature')}

  • def usersResult = karate.repeat(2,users)

因此,我希望能够创建具有不同ID的多个用户。我尝试了以下方法:

* def用户=

    """
    function(){
        var myId = null;
        if(myId == null)
        {
          myId = call read('classpath:karate/helpers/guid.js')
        }
        karate.call('classpath:v1/api_CreateUser.feature');
    }
    """ 
  • def usersResult = karate.repeat(2,users)

所以想法是每次都将'myId'变量重置为null,检查null是否为true,然后调用生成ID的js函数并将结果分配给'myId'变量。 然后,将在karate.call('classpath:v1 / api_CreateUser.feature')行上使用该变量。

很遗憾,我收到javascript评估失败错误。

有人可以帮忙吗?

谢谢

1 个答案:

答案 0 :(得分:1)

当您在空手道中和在JS中时,要略有不同。例如:

myId = call read('classpath:karate/helpers/guid.js')

这行不通。您正在寻找的是:

myId = karate.call('classpath:karate/helpers/guid.js');

我建议您阅读并理解Karate Expressions上的部分,这将在以后为您省去很多麻烦。

使用JS函数(有效)时,您无需担心自己是什么。只要在任何地方调用它,它就会“分配”一个新值。例如,如果您有:

* def time = function(){ return java.lang.System.currentTimeMillis() + '' }
* def first = time()
* def second = time()

此处firstsecond总是不同的。我想现在您拥有了所需的一切。您正在尝试从函数内部访问在空手道中定义的JS变量,这取决于何时初始化了,如果您不知道自己在做什么,我不建议这样做。但是,如果要访问空手道变量的最新值,正确的方法是使用karate.get(varNameAsString)