空手道:如何使用不同功能文件中的Javascript功能

时间:2017-11-23 16:37:39

标签: karate

我创建了一个包含大量javascript函数的功能文件。

在一个不同的功能文件中,我想使用其中一个功能(并传入一个值)。

我该怎么做?

我的功能文件名为SystemSolentraCustomKarateMethods.feature

这是当前内容(目前只包含一个功能):

Feature: System Solentra Status Test

Background:

* def checkreturneddatetimeiscorrect =

#The following code compares the passed in datetime with the current systemdatetime and
#makes sure they are within 2 seconds of each other

"""
function(datetime) {

var datenow = new Date();
karate.log("***The Date Now  = " + datenow.toISOString() + " ***");
var timenow = datenow.getTime();
karate.log("***The Time Now in Milliseconds  = " + timenow+ " ***");


karate.log("***The Passedin Date  = " + datetime + " ***");
var passedintime = new Date();
passedintime = Date.parse(datetime);
karate.log("***The Passed in Time = " + passedintime+ " ***");

var difference = timenow - passedintime;
karate.log("***The Time Difference = " + difference + " milliseconds ***");



return (difference < 2000)

}
"""

2 个答案:

答案 0 :(得分:2)

谢谢彼得,我现在已经想出了如何做到这一点。

(1)包含函数的特征文件必须具有Feature,Background和Scenario标记 - 即使您的文件不包含任何场景。 (*请参阅下面的示例文件)

(2)在要调用FROM的要素文件中,将以下代码添加到背景部分:

* call read('yourfilename.feature')

(3)您现在可以使用被调用特征文件中的函数

以下是我正在调用的功能文件的结构:

Feature: Custom Karate Methods
This feature file contains Custom Karate Methods that can be called and used from other Feature Files

Background:

* def *nameofyourfunction* =

#Comment describing the fuction

"""
function() {

*code*

}
"""

****Scenario: This line is required please do not delete - or the functions cannot be called****

答案 1 :(得分:1)

我认为您已经在这里看到了答案,这个问题完全重复:https://stackoverflow.com/a/47002604/143475(编辑:好的,也许不是)

无论如何,我会重复我在那里发布的内容:

  • 在一个功能中定义多个功能并从多个其他功能中调用它时没有问题
  • 无论如何,你需要为每个功能提供一个唯一的名称
  • 当您使用call进行该功能时,所有功能都可用,是的,但是如果您不使用它们,那就没关系。如果你担心性能和内存,恕我直言,这是不成熟的优化
  • 如果这听起来不够好,实现目标的一种方法是使用一堆静态方法定义Java类Foo。然后你可以{em} Foo.myMethodOne()Foo.myMethodTwo()。在你的情况下,我强烈推荐这种方法,因为你似乎期待实用程序方法的爆炸式增长,而且根据我的经验,这可以在Java中更好地管理,因为你可以更好地维护代码,IDE支持,单元测试,调试和所有

希望有意义!