在空手道DSL中,调用javascript文件返回java.lang.RuntimeException

在空手道DSL中,调用javascript文件返回java.lang.RuntimeException,javascript,node.js,karate,Javascript,Node.js,Karate,我有一个javascript文件要调用。内容如下。当我试图调用该文件时,我一直得到一个“找不到名为:response的变量”,即使有明确定义的变量。该文件在使用节点的命令行中执行良好,因此javascript函数是有效的。有什么想法吗?我在截图中附上了错误信息 下面代码段中的Javascript内容 空手道脚本: 场景:调用JavaScript: * def sample = read('classpath:reusable/gen-data.js') * print some

我有一个javascript文件要调用。内容如下。当我试图调用该文件时,我一直得到一个“找不到名为:response的变量”,即使有明确定义的变量。该文件在使用节点的命令行中执行良好,因此javascript函数是有效的。有什么想法吗?我在截图中附上了错误信息

下面代码段中的Javascript内容

空手道脚本:

场景:调用JavaScript:

    * def sample = read('classpath:reusable/gen-data.js')

    * print someValue
函数createTestData(sampleJson、fieldsToChange、numRecords){
var testData=[];
对于(变量i=0;igetTestData()我的解决方法是使用java而不是JavaScript

我认为这个错误是在JavaScript不正确时抛出的。例如,在我的例子中,这个JS文件:

/* Set the custom authentication header */
function fn() {
    var authToken = karate.get('authToken');
    var out = {};
    out['Auth-Token'] = authToken
    return out;
}
此文件将生成“未找到名为:response的变量”

原因是“右侧(或*.js文件的内容,如果适用)应该以function关键字开头。”根据空手道文档()

现在,通过移动注释并使function关键字成为文本的第一位,它将按预期工作:

function fn() {
/* Set the custom authentication header */
    var authToken = karate.get('authToken');
    var out = {};
    out['Auth-Token'] = authToken
    return out;
}

在OP中,function关键字是文件中的第一个内容,但在原始函数之外还有javascript——我认为这对于空手道语法是不合法的。换句话说,所有内容都必须在外部函数中。

抱歉,我在这里无能为力,因为这一切都非常混乱。我不得不说你似乎没有必要把JS的事情复杂化。除非你真的需要,否则不要使用JS。非常好。在上面的场景中,我真的必须使用JS。最后切换到java,工作起来很有魅力。