json-schema-mock
Version:
data mocker for json-schema.
85 lines (74 loc) • 2.71 kB
JavaScript
/**
* format 数据模拟,只支持 json-schema-format 中定义的format,以保持一致性
*/
var Format = require( 'json-schema-format' );
var MockJS = require( 'mockjs' );
var MockRandom = MockJS.Random;
var CDN_PICS = require( '../MOCK_DATA/cdn_pics.json' );
var FormatMocker = function( format, schema, wholeSchema ){
var formats = Format.getAllFormats();
var result = undefined;
formats.forEach(function( f ){
if( f === format ){
switch( format ){
case 'date-time': {
result = MockRandom.datetime('yyyy-MM-ddTHH:mm:ss') + '.' + MockRandom.integer( 10, 100 ) + 'Z';
break;
}
case 'email': {
result = MockRandom.email();
break;
}
case 'hostname': {
result = MockRandom.domain();
break;
}
case 'ipv4': {
result = MockRandom.ip();
break;
}
case 'ipv6': {
break;
}
case 'uri': {
result = MockRandom.url();
break;
}
case 'DATE_TIME': {
result = MockRandom.datetime();
break;
}
case 'TIMESTAMP': {
result = Date.now() + MockRandom.integer( -864000000, +864000000);
break;
}
case 'URL': {
result = MockRandom.url();
break;
}
case 'TMALL_DETAIL': {
result = 'http://detail.tmall.com/item.htm?id=' + MockRandom.integer( 10000000000, 99999999999 );
break;
}
case 'TAOBAO_DETAIL': {
result = 'http://item.taobao.com/item.htm?id=' + MockRandom.integer( 10000000000, 99999999999 );
break;
}
case 'TMALL_SHOP': {
result = 'http://' + MockRandom.string( 'lower', 4, 10 ) + '.tmall.com';
break;
}
case 'TAOBAO_SHOP': {
result = 'http://' + MockRandom.string( 'lower', 4, 10 ) + '.taobao.com';
break;
}
case 'CDN_PIC': {
result = CDN_PICS[ MockRandom.integer( 0, CDN_PICS.length -1 ) ];
break;
}
}
}
});
return result;
};
module.exports = FormatMocker;