Как сгенерировать JSON с N объектами в массиве, используя платформу каратэ? - PullRequest
1 голос
/ 12 апреля 2019

У меня есть следующий объект json:

{
  "email": "api.test@cool.io",
  "firstName": "John",
  "lastName": "Doe",
  "birthday": "1982-08-30",
  "createdAt": "2015-10-02T08:23:53Z",
  "gender": "male",
  "businessUnit": "DE"
}

И я хочу поместить его в мой массив с именем "Udpated" N раз:

{ updated : [], deleted : []}

Не могли бы вы сказать, какМогу ли я сделать это с помощью фреймворка каратэ?Как это можно сделать элегантным способом?

Я пробовал чистый JS вот так

 Scenario: read json within a js function1
        * def getId = function(){ return java.util.UUID.randomUUID() + '' }
        * def x = read('classpath:data/user.json')
        * eval
        """
         var body = { updated : [], deleted : []};
         var foo = function(){
            var uuid = getId();
            x.id = uuid;
            x.email = 'api.test+' + uuid + '@cool.io';
            body.updated.push(x);
            body.updated.push(x);
          }
          foo();
          karate.set('temp', body);
        """
        * print temp

, но в результате получил не массив, а карту.Вот мой результат:

15:58:45.580 [main] INFO  com.intuit.karate - [print] {
  "updated": {
    "0": {
      "email": "api.test+543d3448-7726-4bb3-8762-e593fb2c5435@cool.io",
      "firstName": "John",
      "lastName": "Doe",
      "birthday": "1982-08-30",
      "createdAt": "2015-10-02T08:23:53Z",
      "gender": "male",
      "businessUnit": "DE",
      "id": "543d3448-7726-4bb3-8762-e593fb2c5435"
    }
  },
  "deleted": {
    "0": "#ref:java.util.LinkedHashMap"
  }
}

1 Ответ

1 голос
/ 12 апреля 2019

Посмотрите, имеет ли это смысл.Да, есть раздражающая ошибка в крайнем случае для вложенных массивов JS, возвращающихся как JSON (Map-s).Существует быстрое решение для исправления, которое вы можете найти в комментариях здесь: https://stackoverflow.com/a/54256766/143475

Просто думайте о чем-либо в мире каратэ как о Java (предпочитаю это) и о чем-то в функции JS как о чистом JS - но котороеможет ссылаться на существующую переменную Java.Есть несколько элегантных способов сделать это, но это то, что я придумал быстро.

* def getId = function(){ return java.util.UUID.randomUUID() + '' }
* def x = { foo: 'bar' }
* def body = { updated : [], deleted : [] };
* def fun =
"""
function() {
  var uuid = getId();
  x.id = uuid;
  x.email = 'api.test+' + uuid + '@cool.io';
  body.updated.add(x);
  body.deleted.add(x);
}
"""
* eval fun()
* copy body = body
* print body

copy избавляет от дубликата ссылки на объект, получая сериализацию должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...