Как использовать / ссылочные значения полей, сгенерированные в той же схеме JSON

Я пытаюсь создать фиктивные данные с помощью json-server в сочетании с json-schema-faker,

Я пытался использовать $ref свойство, но я понял, что это только ссылки на тип, а не точное значение.

Есть ли способ повторно использовать то же значение, а не только его тип?

Схема у меня есть в mockDataSchema.js файл:

var schema =
{
    "title": "tests",
    "type": "object",
    "required": [
        "test"
    ],
    "properties": {
        "test": {
            "type": "object",
            "required": [
                "id",
                "test2_ids",
                "test3"
            ],
            "properties": {
                "id": {
                    "type": "string",
                    "faker": "random.uuid" // here
                },
                "test2_ids": {
                    "type": "array",
                    "items": {
                        "type": "string",
                        "faker": "random.uuid" // here
                    }
                },
                "test3": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string",
                                "faker": "random.uuid" // here
                            }
                        }
                    }
                }
            }
        }
    }
};

module.exports = schema;

Из этой схемы я хочу id быть одинаковым во всех трех местах, которые я указал в комментарии // here,

Обратите внимание, что я не могу использовать enum или же const как я хочу иметь несколько tests вхождения.

test2_ids будет массив, поэтому я хотел бы включить этот конкретный идентификатор для первого идентификатора и других значений того же типа..

в id из test3 я просто хочу точно такое же значение, как id из test,

Реально ли то, что я пытаюсь достичь?

Или есть способ изменить эти данные в generateMockData.js файл вместо mockDataSchema.js которая включает в себя эту схему?

мой generateMockData.js:

var jsf = require('json-schema-faker');
var mockDataSchema = require('./mockDataSchema');
var fs = require('fs');

var json = JSON.stringify(jsf(mockDataSchema));

fs.writeFile("./src/api/db.json", json, function (err) {
  if (err) {
    return console.log(err);
  } else {
    console.log("Mock data generated.");
  }

});

0 ответов

Я хотел бы поделиться здесь решением, которое я нашел. В моем случае мне потребовалось сгенерировать такое же значение для полейpassword а также password_confirmation с помощью json-schema-faker, и кое-что, что сработало для меня, было назначить новое свойство в библиотеке faker и поместить новое имя свойства в схему faker. Вот код:

import faker from 'faker';
import jsf from 'json-schema-faker';

// here we generate a random password using faker
const password = faker.internet.password();
// we assign the password generated to a non-existent property, basically here you create your own property inside faker to save the constant value that you want to use.
faker.internet.samePassword = () => password;
// now we specify that we want to use faker in jsf
jsf.extend('faker', () => faker);
// we create the schema specifying the property that we have created above
const fakerSchema = {
   type: 'object',
   properties: {
      password: {
         faker: 'internet.samePassword',
         type: 'string'
      },
      password_confirmation: {
         faker: 'internet.samePassword',
         type: 'string'
      }
   }
};
// We use the schema defined and voilá!
let dataToSave = await jsf.resolve(fakerSchema);


/*
This is the data generated
{
   password: 'zajkBxZcV0CwrFs',
   password_confirmation: 'zajkBxZcV0CwrFs'
}
*/
Другие вопросы по тегам