我正在尝试通过结合使用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以及相同类型的其他值包括该特定的id。
在id
的{{1}}中,我只想要与test3
的{{1}}完全相同的值。
我要实现的目标可行吗?
或者是否可以更改id
文件中的这些数据,而不是更改包含该模式的test
中的数据?
我的generateMockData.js
:
mockDataSchema.js
答案 0 :(得分:0)
我想在这里分享我找到的解决方案。就我而言,我需要使用password
为字段password_confirmation
和json-schema-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'
}
*/