nuysoft / mock Goto Github PK
View Code? Open in Web Editor NEWA simulation data generator
Home Page: http://mockjs.com
License: Other
A simulation data generator
Home Page: http://mockjs.com
License: Other
@
如果需要添加的话,我需要在哪个文件中修改呢
1、能否让mock规则支持运算?
可以实现简单的加减乘除,这样就可以配合动态参数,模拟出比较真实地接口行为。
2、能否获取当前数组元素的index?比如用@INDEX
来表示
虽然可以通过增加一个自增类型的字段来辅助实现(例如自增id,可以用@id
来获取index),不过该辅助字段并非接口真实所用的字段。
rule | String | Number | Boolean | Object | Array | Function | RegExp |
---|---|---|---|---|---|---|---|
min | √ | √ | √ | √ | √ | √ | |
max | √ | √ | √ | √ | √ | √ | |
dmin | √ | ||||||
dmax | √ | ||||||
step | √ |
有很多ajax请求都是需要有一些界面的交互过程的,比如显示loading提示等,但是现在是没有任何延迟,以至于前期开发过程根本就看不到这些效果,很难调试。
我在我的fork库里面做了些修改,这样调用ajax的响应方法时,就可以延迟几秒,可以更好的模拟真实的网络环境,秒数是一个范围内的随机数:
https://github.com/luozhihua/Mock/blob/master/src/mockjax.js#L52
问题出在这里:
function mockxhr() {
...
send: function() {
var onload = this.onload;
/* 模拟异步性,否则部分回调操作会提前触发,导致问题 */
onload && setTimeout(function() {
onload();
});
},
...
}
我上传了测试文件在这里:
http://demo.qpdiy.com/xw/other/Mock/demo-err.html
预览地址 : mock-demo
<script>
Mock.mock('mockjs.json', {
'list|1-10':[{
'id|+1':1,
'email':'@EMAIL'
}]
});
$.ajax({
url: 'mockjs.json',
}).done(function(data, status, xhr){
console.dir(
JSON.stringify(data, null, 4)
)
})
</script>
mock没有阻止ajax请求,报错!请问这是为啥?
ajax请求,肯定有时延。而mock却是立刻返回结果,还是不够好。有延时返回的配置吗?
诡异的错误,请求错误的mock.js路径
先占位,现在用户反馈次数>3...需要重视起来。T .T
Random.chineseTitle();
Random.chineseName(2, 3) // 二字、三字姓名
Mock.mockjax里有一句jQuery.ajaxPrefilter("script", prefilter);
用
$('div').load('demo.html');
异步加载js文件的时候,默认会调用json解析html里的js链接,然后报错
Uncaught SyntaxError: Unexpected token /
测试代码我传到网上了:
http://demo.qpdiy.com/xw/other/Mock
http://www.json-generator.com/
现在我这边目前又遇到一个问题,
var names = ["福州", "泉州", "厦门"];
var area = {
'福州': ['鼓楼区', '台江区', '马尾', '仓山'],
'泉州': ['丰泽区', '泉港区', '惠安县', '安溪县'],
'厦门': ['海沧区', '湖里区', '集美区', '同安区']
};
"data|20-30": [{
"_id|+1": 1,
"city_name|1": names,
"name|1": area["@city_name"]
}]
name为undifine
我在Handle对象添加了一个"function"处理函数:
Handle.extend({
Random: Random,
......
"function": function(options) {
return options.template.apply(this, [options.obj]);
}
});
这边还是有两个问题:
使用时:
"data|20-30": [{
"_id|+1": 1,
"city_name|1": names,
"name": function(obj) {
console.log(this.Random.pick(area[obj.city_name]));
}
}]
Util.extend
在尚未声明变量 clone
的情况下,为变量 clone
赋了值
例如下面的数据模板:
{
name: '@first @last',
first: 'fffff',
last: 'lllll'
}
生成的数据应该是:
{
name: 'fffff lllll',
first: 'fffff',
last: 'lllll'
}
而实际上生成的是:
{
name: 'William Garcia',
first: 'fffff',
last: 'lllll'
}
即没有引用数据模板中的属性 first
和 last
,仍然通过 Random.first()
和 Random.last()
生成了模拟数据。
补充
如果属性 first
和 last
在 name
之前,则会引用,生成的数据符合期望,如下所示:
{
first: 'fffff',
last: 'lllll',
name: '@first @last'
}
如果引用的属性尚不存在,而且在 Random
中也没有同名方法,则会报错。
// Mock.mock(rurl, template)
Mock.mock(/\.json/, {
'list|1-10': [{
'id|+1': 1,
'email': '@EMAIL'
}]
})
$.get('hello.json').done(function(data, status, jqXHR){
$('<pre>').text(JSON.stringify(data, null, 4))
.appendTo('body')
})
希望尽快 publish 新版本到 npm
Are you kidding me? https://github.com/nuysoft/Mock/blob/master/src/random.js#L1374.
How could the second return ever executed?
TypeError: second argument to Function.prototype.apply must be an array
@IMG(@AD_SIZE)
。@IMG(@size)
。#%&()?/.
。请看看,某位客户的JSON,通过RAP生成了模板后,在Mock.mock时报错。
{
"extra": {
"page": 1,
"pagesize": 20,
"totalpage": 1,
"total": 10
},
"message": "\u64cd\u4f5c\u6210\u529f",
"result": true,
"code": 99999999,
"data|2": [{
"designer_id": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(1,1)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10000';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"scene_name": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"\u5546\u54c1\u6548\u679c\u6d4b\u8bd5\",\"\u5546\u54c1\u6548\u679c\u6d4b\u8bd5\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10001';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"in_shelf": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(1,1)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10002';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"room_args": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"{\"1\":{\"id\":1,\"FOVx\":65.97752238227275,\"FOVy\":40.117807,\"Position\":{\"x\":3.368628,\"y\":-2.995035,\"z\":1.4},\"Quaternion\":{\"x\":0.722453,\"y\":0.001152,\"z\":-0.001102,\"w\":-0.691419},\"angleX\":107.922626,\"angleY\":45.132237,\"dragAngleX\":107.922626,\"dragAngleY\":45.132237,\"isPanorama\":true,\"dragAngleLeft\":52,\"dragAngleRight\":33,\"dragAngleUp\":22,\"dragAngleDown\":22,\"exposureBias\":1,\"QuaternionNew\":{\"x\":-0.7155519334704465,\"y\":-0.08015251829528554,\"z\":0.07724920278482071,\"w\":0.6896329204632993}},\"room\":{\"sizeX\":13.4,\"sizeY\":7.2,\"sizeZ\":3.2,\"isPanorama\":true}}\",\"{\"1\":{\"id\":1,\"FOVx\":65.97752238227275,\"FOVy\":40.117807,\"Position\":{\"x\":3.368628,\"y\":-2.995035,\"z\":1.4},\"Quaternion\":{\"x\":0.722453,\"y\":0.001152,\"z\":-0.001102,\"w\":-0.691419},\"angleX\":107.922626,\"angleY\":45.132237,\"dragAngleX\":107.922626,\"dragAngleY\":45.132237,\"isPanorama\":true,\"dragAngleLeft\":52,\"dragAngleRight\":33,\"dragAngleUp\":22,\"dragAngleDown\":22,\"exposureBias\":1,\"QuaternionNew\":{\"x\":-0.7155519334704465,\"y\":-0.08015251829528554,\"z\":0.07724920278482071,\"w\":0.6896329204632993}},\"room\":{\"sizeX\":13.4,\"sizeY\":7.2,\"sizeZ\":3.2,\"isPanorama\":true}}\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10003';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"style_id": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(1,1)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10004';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"creator": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"\",\"\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10005';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"pics_path": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"\",\"\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10006';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"user_id": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(0,0)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10007';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"adv_bottom": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"\",\"\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10008';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"haspics": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(0,0)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10009';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"isrecommend": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(0,0)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10010';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"root_id": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(0,0)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10011';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"desc": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"<p>12<\/p>\",\"<p>12<\/p>\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10012';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"model_info": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"[{\"id\":157,\"position\":{\"x\":0.8290811648136097,\"y\":2.773665489427823,\"z\":0.3800000000000001},\"rotation\":{\"x\":0,\"y\":0,\"z\":0.06920367457323079},\"quaternion\":{\"x\":0,\"y\":0,\"z\":0.034594932977462294,\"w\":0.9994014161548326}},{\"id\":37,\"position\":{\"x\":3.211819238806907,\"y\":0.8361365252640024,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":-1.5207963275941434},\"quaternion\":{\"x\":0,\"y\":0,\"z\":-0.6892099939523402,\"w\":0.72456164971396}},{\"id\":37,\"position\":{\"x\":2.1239044442716355,\"y\":0.7270494947133531,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":1.809203666420212},\"quaternion\":{\"x\":0,\"y\":0,\"z\":0.7861791507359865,\"w\":0.6179986593416227}},{\"id\":64,\"position\":{\"x\":1.2854428247993726,\"y\":2.1088075631936727,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":-1.5707963267948963},\"quaternion\":{\"x\":0,\"y\":0,\"z\":-0.7071067811865475,\"w\":0.7071067811865477}},{\"id\":160,\"position\":{\"x\":2.5180308423769353,\"y\":1.7037948087943773,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":-0.0007963267961379878},\"quaternion\":{\"x\":0,\"y\":0,\"z\":-0.00039816338754858187,\"w\":0.9999999207329553}},{\"id\":110,\"position\":{\"x\":4.363383838660308,\"y\":1.8446611590397413,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":-0.6207963216517365},\"quaternion\":{\"x\":0,\"y\":0,\"z\":-0.30543779417332834,\"w\":0.9522120320026057}},{\"id\":150,\"position\":{\"x\":0.38423754919784114,\"y\":2.8821267664956207,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":0.12920367633817348},\"quaternion\":{\"x\":0,\"y\":0,\"z\":0.06455691268644366,\"w\":0.9979140268702484}},{\"id\":179,\"position\":{\"x\":1.6566218773145178,\"y\":0.6982262358268683,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":-0.3207963322474933},\"quaternion\":{\"x\":0,\"y\":0,\"z\":-0.15971127443568203,\"w\":0.9871637700088726}},{\"id\":116,\"position\":{\"x\":0.7876551977953973,\"y\":1.0447069865075296,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":0.4692036732051035},\"quaternion\":{\"x\":0,\"y\":0,\"z\":0.2324557474516606,\"w\":0.9726069737960394}},{\"id\":123,\"position\":{\"x\":0.2772290873919028,\"y\":0.450067813046513,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":0.9792036732051036},\"quaternion\":{\"x\":0,\"y\":0,\"z\":0.47027453822665294,\"w\":0.8825201746678136}}]\",\"[{\"id\":157,\"position\":{\"x\":0.8290811648136097,\"y\":2.773665489427823,\"z\":0.3800000000000001},\"rotation\":{\"x\":0,\"y\":0,\"z\":0.06920367457323079},\"quaternion\":{\"x\":0,\"y\":0,\"z\":0.034594932977462294,\"w\":0.9994014161548326}},{\"id\":37,\"position\":{\"x\":3.211819238806907,\"y\":0.8361365252640024,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":-1.5207963275941434},\"quaternion\":{\"x\":0,\"y\":0,\"z\":-0.6892099939523402,\"w\":0.72456164971396}},{\"id\":37,\"position\":{\"x\":2.1239044442716355,\"y\":0.7270494947133531,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":1.809203666420212},\"quaternion\":{\"x\":0,\"y\":0,\"z\":0.7861791507359865,\"w\":0.6179986593416227}},{\"id\":64,\"position\":{\"x\":1.2854428247993726,\"y\":2.1088075631936727,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":-1.5707963267948963},\"quaternion\":{\"x\":0,\"y\":0,\"z\":-0.7071067811865475,\"w\":0.7071067811865477}},{\"id\":160,\"position\":{\"x\":2.5180308423769353,\"y\":1.7037948087943773,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":-0.0007963267961379878},\"quaternion\":{\"x\":0,\"y\":0,\"z\":-0.00039816338754858187,\"w\":0.9999999207329553}},{\"id\":110,\"position\":{\"x\":4.363383838660308,\"y\":1.8446611590397413,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":-0.6207963216517365},\"quaternion\":{\"x\":0,\"y\":0,\"z\":-0.30543779417332834,\"w\":0.9522120320026057}},{\"id\":150,\"position\":{\"x\":0.38423754919784114,\"y\":2.8821267664956207,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":0.12920367633817348},\"quaternion\":{\"x\":0,\"y\":0,\"z\":0.06455691268644366,\"w\":0.9979140268702484}},{\"id\":179,\"position\":{\"x\":1.6566218773145178,\"y\":0.6982262358268683,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":-0.3207963322474933},\"quaternion\":{\"x\":0,\"y\":0,\"z\":-0.15971127443568203,\"w\":0.9871637700088726}},{\"id\":116,\"position\":{\"x\":0.7876551977953973,\"y\":1.0447069865075296,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":0.4692036732051035},\"quaternion\":{\"x\":0,\"y\":0,\"z\":0.2324557474516606,\"w\":0.9726069737960394}},{\"id\":123,\"position\":{\"x\":0.2772290873919028,\"y\":0.450067813046513,\"z\":0},\"rotation\":{\"x\":0,\"y\":0,\"z\":0.9792036732051036},\"quaternion\":{\"x\":0,\"y\":0,\"z\":0.47027453822665294,\"w\":0.8825201746678136}}]\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10013';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"room_id": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(188,188)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10014';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"label_ids": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(36,36)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10015';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"displayorder": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(0,0)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10016';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"model_ids": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"157,37,37,64,160,110,150,179,116,123\",\"157,37,37,64,160,110,150,179,116,123\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10017';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"style": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"\u73b0\u4ee3\",\"\u73b0\u4ee3\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10018';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"updator": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"\",\"\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10019';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"advert_text": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"\",\"\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10020';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"brand_id": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(1,1)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10021';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"pic_resids": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"\",\"\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10022';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"brand": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"Carlhansen&son\",\"Carlhansen&son\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10023';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"owner_id": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(0,0)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10024';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"category": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"\u5c55\u5385\",\"\u5c55\u5385\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10025';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"advert_author": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"\",\"\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10026';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"create_time": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(1431681119,1431681119)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10027';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"adv_top": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"\",\"\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10028';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"scene_id": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(267,267)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10029';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"remark": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(\"\",\"\")";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10030';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"isfav": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(0,0)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10031';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"category_id": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(19,19)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10032';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"area": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(12,12)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10033';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"update_time": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(1431920552,1431920552)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10034';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
},
"pics": {},
"from_id": function() {
var window = function() {
return this;
} ();
function geneVal(key) {
var o = __rap__context__[key];
var arr = o.arr;
return arr[o.index++%arr.length];
}
if (!window.__rap__context__) {
window.__rap__context__ = {};
}
var orderCmd = "$order(0,0)";
var orderArr = eval('[' + orderCmd.substring(7, orderCmd.length - 1) + ']');
var key = '10035';
if (!__rap__context__[key]) {
__rap__context__[key] = {
arr: orderArr,
index: 0
};
}
return geneVal(key);
}
}]
}
现在sentence返回的都是些英文字符, 是否可以支持返回中文字符, 这样在测试某些页面布局时比较好办.
求测试,求解决
Mock.mock(//inc/Task_edit.htm?id=/, {
id: "",
name: Random.string("upper", 20),
subName: Random.string("upper", 20),
userRange: Random.natural(0, 1),
status: Random.natural(0, 1),
description: Random.string("upper", 50),
url: "",
finish: 0,
award: 0,
pic: "",
showBtn: Random.natural(0, 1),
activeBtnName: "签到",
finishBtnName: "已签到",
orderNo: "1",
recommend: Random.natural(0, 1),
platCodes: Random.range(1, 7)
});
这样写,我每次拿到的数据都是一样的,没有变
当我使用grunt-wiredep插件自动将所有已安装的bower包引用到HMTL页面时,会报错,提示mockjs未被注入到HTML中,经测试发现是因为MockJs的bower.json的main字段没有设置所导致的。
解决方法:
"main": ["mock.js"]
;按照语法规范'name|min-max': value 或者 'name|count': value 生成的东西都是重复值 ,按照Random.range(start, stop, step)生成又都是规律 , 请问如我要生成一个如标题的数组该怎么办啊!
因为项目居于backbone开发的,所以关于backbone.Collection的mock数据比较头疼。
[
{ ... },
{ ... }
...
]
目前mock似乎不支持上面数据结构的输出格式,只能手动一条一条添加,还是说我不知道?
想了下,可以换种方法:
var data = mock.mock({'data|5-10': [{ ... }]});
mock.mock(/url/, data.data);
app.get('/foo', function (req, res) {
var data = Mock.mock({
"thumb": Mock.random.dataImage('200x100', 'test')
});
res.jsonp(data);
});
// mockjs: v0.1.4
// nodejs: v0.10.28
比如 提供这样的形式:
Mock.validate( mock_template, data ).
这个功能很重要,
这个如果没有该功能,则无法形成开发和测试的闭环。
新版本提供了两种类型的返回格式:对象、数组。
对于数组,希望返回的是一个数组对象,且能够让mock生成多个项。
但是设定了返回类型为数组,且设定了响应参数后,生成的数据(数组对象),长度一直是1。
是否有什么方式可以让其随机生成不同长度的数组对象?
最外层比较特殊,这一块儿请@墨智 老师看看把,上次我们聊到virtual root类似的实现是否可以解决最外层MOCK规则控制的问题呢?
就目前而言,Mock.js并没有对最外层数据提供控制的方式。
mockjs很好用,大赞!
使用过程,遇到以下场景,需根据头部决定是否拦截请求
因为接口与前端并行开发,某些接口完成后,不再需要mock data,直接发送请求。
请问mockjs是否支持该场景?应该怎么实现?
Mock.mock(/index\.html/, function(options){
var headers = options.headers, moduleName = headers["Module"];
if(moduleName === "mainRecommend"){
return mockMainRecommend();
}else if (moduleName === "mainTop"){
return mockMainList();
}else{
//继续发送ajax请求
}
}
例如,在下面的 数据模板 中,备选元素 中仍然含有 占位符:
{
'pick|1': [{
url: '@URL'
method: 'GET'
}, {
url: '@URL'
method: 'POST'
}, {
url: '@URL'
method: 'HEAD'
}, {
url: '@URL'
method: 'DELETE'
}
]
}
注意:
代码在demo的console中跑是没有问题的,我在自己本机服务器的环境上面,就是出不来数据,虽然请求已经拦截,但是后续的done里面的代码都无法执行。
grunt构建的时候
options: {
sourceMap: 'dist/mock-min.map'
}
应将“dist/"去掉
// 错误样本,报错:RangeError: Maximum call stack size exceeded
var data = ({"msg":1,"hostName":"newbpfe6.vm.kgb.cm3","code":"200","result":{"totalItem":"14","toPage":"1","pageSize":"200","items|10":[{"adGroupDTO":{"nsMaxPriceGtLimitPrice":1,"adGroupId|+1":10000,"createTime":"20140310172955","onlyUpdateNsMaxPrice":1,"outsideItemPrice":"30000.00","outsideItemExpireTime":"20500101000000","defaultPrice":"5","plState":1,"redirectState":1,"outsideItemNumId":"36763870637","nonsearchState":"1","customerId":"1106887486","lastSyncDate":1,"displayOnlineState":"1","linkUrl":"http://item.taobao.com/item.htm?id=36763870637","title":"@title","outsideKey":1,"garbageState":1,"displayDefaultPrice":"0.05","campaignId|1000-9999":"13582395","properties":1,"outsideItemStrId":1,"nonsearchIsDefaultPrice":"0","adgroupType":1,"lastUpdateTime":"20140310172955","imgUrl":"http://gtms01.alicdn.com/tps/i1/T1icQqFipbXXaKKqDm-70-70.jpg","limitPrice":1,"onlineState":"1","nick":1,"extension":1,"nonsearchMaxPrice":"100","offlineType":"0","categoryId|10000-99999":"16 50010850","isCatMatchOnline":1,"extStatus":1,"reason":1,"outsideItemState":"1"},"campaignTitle":"定向推广用-千万别改设置平台!!!2!!","displayOnlineState":"1","fullImgUrl":"http://img.taobaocdn.com/bao/uploaded/i2/T1Wd0sFBVeXXXXXXXX_!!0-item_pic.jpg","adGroupCreativeState":"1","catPathNames":1}]}})
Mock.mock(data);
目前 Mock.mock() 支持的方法签名有:
@chongzhi 建议增加一个参数 rtype,以区分相同 URL 但是请求类型(GET、POST、PUSH、DELETE等)不同的场景,即支持 RESTFul 风格的 API:
Mock.js 语法分为两类,「模板」与「占位符」。模板语法的设计相较占位符更加简洁友好,但有一个缺陷即其语法限制了模板方式只能构造 key - value 形式的数据片段。相对的,占位符语法则更加严谨。在我的理解中,模板方式是占位符方式的简化,模板方式能构造的数据是占位符方式能构造的数据的子集。
在现在的版本(1.5)中,所有使用模板语法能构造的数据片段都可以使用占位符方式构造,除了:
"name|count": [{}, {} ...]
, "name|min-max": [{}, {} ...]
"name|count": "value"
, "name|min-max": "value"
这意味着,上面这些类型的数据片段,不能独立于 key(name) 单独存在。这导致在两种情况下现有的语法无法构建所需的数据:
该数据片段即为 JSON 根节点
[{}, {}, {}, ...]
"★★★★★"
该数据片断为数组元素
{
"array": [
[{}, {}, {}, ...]
...
]
}
{
"array": ["★★★", "★★★★★", ...]
}
其中,「重复元素的数组作为 JSON 根节点」是 Restful API 风格对列表资源的约定,被广泛采用——这里有一个相关的 issue: #6——无法构建此类数据也是我目前真正遇到问题。其他情况在目前的实践中几乎不会遇到,在此提出是出于对占位符语法特性完整性的考虑。
这里我冒昧提出一个可行的解决方案,即增加以下占位符语法:
["@ARRAY", item, count]
, ["@ARRAY", item, min, max]
["@ARRAY", {}, 3]
//=>
[{}, {}, {}]
值得指出的是,这里将占位符的形式从单纯的字符串扩展到了一个特定格式的对象。
"@REPEAT('string', count)"
, "@REPEAT('string', min, max)"
{
"array|10": ["@REPEAT('★', 1, 5)"]
}
//=>
{
"array": ["★★★", "★★★★★", ...]
}
例如下面的例子,函数 xfn2
和 xfn4
都依赖于属性 x
,但是 xfn2
在 x
之前,导致在执行 xfn2
无法找到 x
,最终 xfn2
的值为 null。
var tpl = {
xfn2: function() {
return this.x * 2
},
x: 1,
xfn4: function() {
return this.x * 4
}
}
// =>
{
"xfn2": null,
"x": 1,
"xfn4": 4
}
解决方案
一种简单的方案是,把所有的函数属性都放在最后执行,可以应对大部分的场景。
严格来说,这么做并不能覆盖所有场景,例如其中一个函数属性依赖了另一个函数属性。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.