I have config-base.js which is loading the 'env_data.json' file. The java script in config-base.js is not setting the values in config as expected. I am trying to collect list of fields under common and appA parentElement and setting under config Json. This I could not achieve it.
I am passing appName as 'appA' and env as 'uat' via CLI command as like below
java -cp karate:. -Dkarate.config.dir=. -Dkarate.appName=appA -jar karate.jar myFeature.feature -T 1 -t @smoke -e uat
I am trying to build config JSON as like below via JS.
config {
baseUrl : 'http://uat.someurl.com'
parameterX : 'x2',
parameterY :'y2'
someOtherBackendUrlA : 'http://uat.appA.com'
parameterA : 'a2',
parameterB :'b2'
}
My env_data.js is look like this
[{
appName : 'common',
data: {
uat: {
baseUrl : 'http://uat.someurl.com'
parameterX : 'x2',
parameterY :'y2'
}
},{
appName : 'appA',
data: {
uat: {
someOtherBackendUrlA : 'http://uat.appA.com'
parameterA : 'a2',
parameterB :'b2'
}
}}]
My karate-base.js is written like below
function fn() {
var env = karate.env;
karate.log('karate.env system property was :', env);
if (!env) {
env = 'dev';
}
var listOfApplications = read('./env_data.json');
var config = {};
switch (env) {
case "uat":
for (var i = 0; i < listOfApplications.lenght; i++) {
var appObject = listOfApplications[i];
if (karate.properties['karate.appName'] == appObject.appName) {
config = appObject.data[env];
} else if ('common' == appObject.appName) {
config.map(element => {
element.baseUrl = appObject.data[env].baseUrl;
}
}
break;
}
karate.configure('connectTimeout', 5000);
karate.configure('readTimeout', 5000);
return config;
}
I can understand that, I am not mapping config values properly in else condition. I have tried map and foreach. but for these both functions, I got error saying org.graalvm.polyglotException:TypeError: config.map is not a funtion
I like to construct my config JSON along with common parameters on each application values. Please show some light on how can I fix this.