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

In Karate DSL, calling a javascript file returns java.lang.RuntimeException

我有一个 javascript 文件要调用。内容如下。当我尝试调用该文件时,即使明确定义了一个变量,我仍然会收到 "no variable found with name: response"。该文件使用节点在命令行中执行良好,因此 javascript 函数有效。有什么想法吗?我在屏幕截图中附加了错误消息。

Javascript 以下代码段中的内容。

空手道剧本:

场景:调用JavaScript:

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

    * print someValue

function createTestData(sampleJson, fieldsToChange, numRecords) {
    var testData = [];

    for (var i = 0; i < numRecords; i++) {
        var copy = JSON.parse(JSON.stringify(sampleJson));

        fieldsToChange.forEach(function(fieldToChange) {
            copy[fieldToChange] = copy[fieldToChange] + i;
        });

        testData.push(copy);
    }



    return {content: testData};
}

var testData = {

  "country": "US",
  "taskStatusCode" : "Closed",
  "facilityCode" : "US_203532",

};

function getTestData() {

  String testData = JSON.stringify(createTestData(testData, ["taskStatusCode", "facilityCode"], 1), null, 1);

  console.log("all done getTestData()");
  console.log("test data: \n" + testData);

  return testData;
};


console.log("calling getTestData()");
getTestData();

我的解决方法是使用 java 而不是 JavaScript。

我认为当 JavaScript 不正确时会引发此错误。例如在我的例子中这个 JS 文件:

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

此文件将生成 "no variable found with name: response"。

原因是 "the right-hand-side (or contents of the *.js file if applicable) should begin with the function keyword." 根据空手道文档 (link)。

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

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

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