7

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

vadivelu
  • 142
  • 1
  • 9

2 Answers2

10

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:

Scenario:
* 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()
Peter Thomas
  • 54,465
  • 21
  • 84
  • 248
  • 2
    I find myself struggling with calling `*.feature` files and js in one go. In your example for `common.feature` is the entire file outlined like this? `Background:` `* def now = function(){ return java.lang.System.currentTimeMillis() }` `* def uuid = function(){ return java.util.UUID.randomUUID() + '' }` – kmancusi Mar 01 '19 at 17:43
5

@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
Shane Rowatt
  • 1,951
  • 3
  • 27
  • 44