Как использовать / ссылочные значения полей, сгенерированные в той же схеме 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'
}
*/