Is it possible to have multiple JS functions insid

2020-02-11 10:04发布

I need to perform two operations on the result of JSON responses.so can we have those different operations inside single JS file? or do we need to have mapping like one JS file for one operation. Please help on this

标签: karate
2条回答
闹够了就滚
2楼-- · 2020-02-11 10:49

@kmancusi This is how I did a common.feature file with my common functions and then the following my.test.feature shows how I import that to use it in another feature.

common.feature

@ignore
Feature:

Scenario:
  * def now = 
      """
        function() { 
          return java.lang.System.currentTimeMillis() 
        }
      """ 

  * def uuid = 
     """
       function() { 
         return java.util.UUID.randomUUID() + '' 
       }
     """

my.test.feature

Feature: my tests

Background:
  * configure logPrettyRequest = true
  * configure logPrettyResponse = true
  * configure ssl = true

Scenario: basic test

  * def util = call read('common.feature')
  * def sessionId = util.uuid()

  * print sessionId
查看更多
乱世女痞
3楼-- · 2020-02-11 10:51

I don't recommend trying to create complicated JavaScript in Karate, it just leads to maintainability issues. If you really want an object with multiple utility methods on it, write a Java class with static methods, and it will be much easier to maintain / debug.

That said, if you really insist - look at this answer: https://stackoverflow.com/a/47002604/143475

But this is what I recommend for most projects. In one "common" feature file, define multiple methods like this:

* def now = function(){ return java.lang.System.currentTimeMillis() }
* def uuid = function(){ return java.util.UUID.randomUUID() + '' }

You can now call this feature like this:

* call read('common.feature')

And now all the functions in that feature are available for use:

* def time = now()
* def id = uuid()
查看更多
登录 后发表回答