我正在尝试使用karate.call来调用JS文件的功能,该文件接收两个参数(字符串,字符串数组)。但是,字符串数组不会传递给JS文件。
JS文件包含:
function(query, fragments) {
// Here lies some code
// One of them includes fragments.length;
}
然后我以这种方式在另一个JS文件上调用JS函数:
//var query = 'Some string';
//var fragments = ['fragment1', 'fragment2'];
var clean = karate.call('../helper/helper.js', [query, fragments]);
我能够传递字符串查询。但是我无法传递字符串数组。错误提示:
TypeError: Cannot read property "length" from undefined
似乎字符串数组没有传递给JS函数。任何帮助将不胜感激。谢谢!
答案 0 :(得分:2)
您可以先阅读函数,然后调用它,就像其他任何js函数一样
var myFun = karate.read('../helper/helper.js');
var funCall = myFun(query, fragments);
或
var myCall = karate.read('../helper/helper.js')(query, fragments);
这应该有效。
答案 1 :(得分:1)
.call
将参数作为逗号分隔的值,如果要将值作为数组传递,则需要使用.apply
。
var clean = karate.call('../helper/helper.js', query, fragments);
将起作用...
答案 2 :(得分:1)
call
方法接受逗号分隔的参数,而apply
接受数组,因此您需要将call
替换为apply
。您的代码看起来像
function karate(query, fragments) {
// Here lies some code
// One of them includes fragments.length;
}
var clean = karate.apply('../helper/helper.js', [query, fragments]);
答案 3 :(得分:1)
这里的答案缺少重要的说明:
我经常做一些arg函数,例如:
* def concatParams =
"""
function(s) {
return "urldt=" + todaysDate + "&caseid=" + s.caseid
}
"""
我会这样称呼:
* def params = call concatParams {caseid: '3433344'}
但是,当我想做2个参数时,我将定义一个如下函数:
* def concatParams =
"""
function(d,s) {
return "urldt=" + d.date + "&caseid=" + s.caseid
}
"""
直觉上,这些都不起作用:
* def params = call concatParams {date: '01/01/2020', caseid: '3433344'}
* def params = call concatParams '01/01/2020' '3433344'
要使其正常工作,我改为这样称呼它:
* def params = concatParams('01/01/2020', '3433344')
文档未对此进行澄清。
答案 4 :(得分:0)