在空手道 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——我认为这对于空手道语法来说是不合法的。换句话说,一切都必须在外部函数中。
我有一个 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——我认为这对于空手道语法来说是不合法的。换句话说,一切都必须在外部函数中。