1

I am trying to call a function that I have defined in a js file in karate dls

This is the file "utils.js"

function Encriptar(text,key) {
    var CryptoJS = require('crypto-js');
    var encoded = CryptoJS.AES.encrypt(arguments[0],arguments[1]).toString();
    return encoded;
}

module.exports = Encriptar;

I think that's how it would be used from a feuture in karate "test.feature"

Feature: test javascript
Scenario: test javascript
* def jsFunction = call read('utils.js')
* def encriptar = jsFunction.Encriptar("text","key");
* print encriptar

When running the test it gives me the following error:

>>> failed features:
>>>> js failed:
01: read('utils.js')
<<<<
org.graalvm.polyglot.PolyglotException: >>>> js failed:
01: (function Encriptar(text,key) {
02:     var CryptoJS = require('crypto-js');
03:     var encoded = CryptoJS.AES.encrypt(arguments[0],arguments[1]).toString();
04:     return encoded;
05: }
06:
07: module.exports = Encriptar;)
<<<<
org.graalvm.polyglot.PolyglotException: SyntaxError: Unnamed:7:0 Expected ) but found module
module.exports = Encriptar;)
^
Unnamed:7:27 Expected ; but found )
module.exports = Encriptar;)
                           ^

- org.graalvm.polyglot.Context.eval(Context.java:373)
- com.intuit.karate.graal.JsEngine.evalForValue(JsEngine.java:124)
- com.intuit.karate.graal.JsEngine.eval(JsEngine.java:120)
- com.intuit.karate.core.ScenarioEngine.evalJs(ScenarioEngine.java:1246)
- com.intuit.karate.core.ScenarioFileReader.readFile(ScenarioFileReader.java:58)
- com.intuit.karate.core.ScenarioEngine.lambda$new$0(ScenarioEngine.java:118)
- <js>.:program(Unnamed:1)

- com.intuit.karate.core.ScenarioEngine.fromJsEvalException(ScenarioEngine.java:1274)
- com.intuit.karate.core.ScenarioEngine.evalJs(ScenarioEngine.java:1248)
- com.intuit.karate.core.ScenarioFileReader.readFile(ScenarioFileReader.java:58)
- com.intuit.karate.core.ScenarioEngine.lambda$new$0(ScenarioEngine.java:118)
- <js>.:program(Unnamed:1)

What am I wrong? Thanks!

  • the official answer is that we don't support the `require` or `import` JS keywords. but since we moved to the graal-js engine, it may be possible in version in 1.0 onwards but will require you to do some research or contribute code – Peter Thomas Jun 09 '21 at 08:26

0 Answers0