无法将两个参数作为参数传递给Javascript函数

时间:2019-06-10 12:54:14

标签: karate

我正在尝试使用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函数。任何帮助将不胜感激。谢谢!

5 个答案:

答案 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)