UNPKG

48.7 kBMarkdownView Raw
1<!-- ## Mock.js -->
2
3<h2 class="hide" href="#">Mock.js</h2>
4<img class="hide" src="mockjs.png" wid>
5
6<h1 style="color: #428BCA; margin-bottom: 30px;">
7 <i class="iconlogo" style="font-size: 80px;">&#x3435;</i>
8 <span>Mock.js</span>
9</h1>
10
11[![Build Status](https://api.travis-ci.org/nuysoft/Mock.png?branch=master)](http://travis-ci.org/nuysoft/Mock)
12<!-- [![GitHub version](https://badge.fury.io/gh/nuysoft%2FMock.png)](http://badge.fury.io/gh/nuysoft%2FMock) -->
13<!-- [![NPM version](https://badge.fury.io/js/mockjs.png)](http://badge.fury.io/js/mockjs) -->
14<!-- [![Bower version](https://badge.fury.io/bo/mockjs.png)](http://badge.fury.io/bo/mockjs) -->
15[![Views in the last 24 hours](https://sourcegraph.com/api/repos/github.com/nuysoft/Mock/counters/views-24h.png)](https://github.com/nuysoft/Mock/)
16
17Mock.js 是一款<!-- 有用且好用的 -->模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试。提供了以下模拟功能:
18
19* 根据数据模板生成模拟数据
20* 模拟 Ajax 请求,生成并返回模拟数据
21* 基于 HTML 模板生成模拟数据
22
23## 在线编辑器
24<!-- 没有 Live Demo 的库都是耍流氓 -->
25
26* [数据模板编辑器](./editor.html#help)
27* [Handlebars &amp; Mustache](./demo/mock4tpl.html)
28* [KISSY XTemplate](./demo/mock4xtpl.html)
29
30## 下载
31
32<p>
33 <a href="./dist/mock.js" class="btn btn-success w250">
34 Development Version (0.1.4)
35 </a> - <i>71kB, Uncompressed</i>
36</p>
37<p>
38 <a href="./dist/mock-min.js" class="btn btn-primary w250">
39 Production Version (0.1.4)
40 </a> - <i>31kB, Minified</i>
41</p>
42<p>
43 <a href="https://github.com/nuysoft/Mock" class="btn btn-default w250">
44 从 Github 获取最新版本
45 </a> - <i>Unreleased</i>
46</p>
47
48<iframe src="http://ghbtns.com/github-btn.html?user=nuysoft&repo=Mock&type=watch&count=true&size=large"
49 allowtransparency="true" frameborder="0" scrolling="0" width="131" height="30"></iframe>
50
51<iframe src="http://ghbtns.com/github-btn.html?user=nuysoft&repo=Mock&type=fork&count=true&size=large"
52 allowtransparency="true" frameborder="0" scrolling="0" width="140" height="30"></iframe>
53
54<!-- <iframe src="http://ghbtns.com/github-btn.html?user=nuysoft&type=follow&count=true&size=large"
55 allowtransparency="true" frameborder="0" scrolling="0" width="165" height="30"></iframe> -->
56
57## 分享文档
58
59* [懒懒交流会 2014.5.30](/doc/lanlan.html)
60
61## 用法
62
63### 浏览器
64
65<iframe width="100%" height="200" src="http://jsfiddle.net/DgJrj/embedded/html,js,result" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
66
67### Node (CommonJS)
68
69 // 安装
70 npm install mockjs
71
72 // 使用
73 var Mock = require('mockjs');
74 var data = Mock.mock({
75 'list|1-10': [{
76 'id|+1': 1
77 }]
78 });
79 console.log(JSON.stringify(data, null, 4))
80
81### Bower
82
83<!-- If you'd like to use [bower](http://bower.io/), it's as easy as: -->
84
85 npm install -g bower
86 bower install --save mockjs
87
88 <script type="text/javascript" src="./bower_components/mockjs/dist/mock.js"></script>
89
90
91### RequireJS (AMD)
92
93<iframe width="100%" height="350" src="http://jsfiddle.net/uTSqT/embedded/js,html,result" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
94
95### Sea.js (CMD)
96
97<iframe width="100%" height="350" src="http://jsfiddle.net/5jX6e/embedded/js,html,result" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
98
99### KISSY
100
101<iframe width="100%" height="400" src="http://jsfiddle.net/En2sX/embedded/js,html,result" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
102
103<!--
104Mock.js 已入驻 [KISSY Gallery](https://github.com/kissygalleryteam),阿里同学可以直接加载 `gallery/Mock/0.1.1/index`:
105
106<iframe width="100%" height="400" src="http://jsfiddle.net/8VNQQ/embedded/js,html,result" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
107-->
108
109### Random CLI
110
111 // 安装
112 npm install mockjs -g
113
114 // 执行
115 $ random url
116 // => http://rmcpx.org/funzwc
117
118---
119
120## 语法规范
121
122Mock.js 的语法规范包括两部分:
123
1241. 数据模板定义(Data Temaplte Definition,DTD)
1252. 数据占位符定义(Data Placeholder Definition,DPD)
126
127### 数据模板定义 DTD
128
129**数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:**
130
131 // 属性名 name
132 // 生成规则 rule
133 // 属性值 value
134 'name|rule': value
135
136**注意:**
137
138* 属性名 和 生成规则 之间用 `|` 分隔。
139* 生成规则 是可选的。
140* 生成规则 有 7 种格式:
141 1. `'name|min-max': value`
142 1. `'name|count': value`
143 1. `'name|min-max.dmin-dmax': value`
144 1. `'name|min-max.dcount': value`
145 1. `'name|count.dmin-dmax': value`
146 1. `'name|count.dcount': value`
147 1. `'name|+step': value`
148* **生成规则 的 含义 需要依赖 属性值 才能确定。**
149* 属性值 中可以含有 `@占位符`
150* 属性值 还指定了最终值的初始值和类型。
151
152<!-- 感谢 @麦少 同学对 Mock.js 语法的整理和分析,才有了这版相对清晰的语法文档。 -->
153
154**生成规则和示例:**
155
1561. 属性值是字符串 **String**
157 1. `'name|min-max': 'value'` 通过重复 `'value'` 生成一个字符串,重复次数大于等于 `min`,小于等于 `max`
158 2. `'name|count': 'value'` 通过重复 `'value'` 生成一个字符串,重复次数等于 `count`
1592. 属性值是数字 **Number**
160 1. `'name|+1': 100` 属性值自动加 1,初始值为 100
161 2. `'name|1-100': 100` 生成一个大于等于 1、小于等于 100 的整数,属性值 100 只用来确定类型。
162 3. `'name|1-100.1-10': 100` 生成一个浮点数,整数部分大于等于 1、小于等于 100,小数部分保留 1 到 10 位。
163
164 {
165 'number1|1-100.1-10': 1,
166 'number2|123.1-10': 1,
167 'number3|123.3': 1,
168 'number4|123.10': 1.123
169 }
170 // =>
171 {
172 "number1": 12.92,
173 "number2": 123.51,
174 "number3": 123.777,
175 "number4": 123.1231091814
176 }
1773. 属性值是布尔型 **Boolean**
178 1. `'name|1': value` 随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率是 1/2。
179 2. `'name|min-max': value` 随机生成一个布尔值,值为 `value` 的概率是 `min / (min + max)`,值为 `!value` 的概率是 `max / (min + max)`
1804. 属性值是对象 **Object**
181 1. `'name|min-max': {}` 从属性值 `{}` 中随机选取 `min``max` 个属性。
182 2. `'name|count': {}` 从属性值 `{}` 中随机选取 `count` 个属性。
1835. 属性值是数组 **Array**
184 1. `'name|1': [{}, {} ...]` 从属性值 `[{}, {} ...]` 中随机选取 1 个元素,作为最终值。
185 2. `'name|min-max': [{}, {} ...]` 通过重复属性值 `[{}, {} ...]` 生成一个新数组,重复次数大于等于 `min`,小于等于 `max`
186 3. `'name|count': [{}, {} ...]` 通过重复属性值 `[{}, {} ...]` 生成一个新数组,重复次数为 `count`
1876. 属性值是数组 **Function**
188
189 `'name': function(){}` 执行函数 `function(){}`,取其返回值作为最终的属性值,上下文为 `'name'` 所在的对象。
190
191### 数据占位符定义 DPD
192
193占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。占位符 的格式为:
194
195 @占位符
196 @占位符(参数 [, 参数])
197
198**注意:**
199
2001. `@` 来标识其后的字符串是 占位符。
2012. 占位符 引用的是 `Mock.Random` 中的方法。
2023. 通过 `Mock.Random.extend()` 来扩展自定义占位符。
2034. 占位符 也可以引用 数据模板 中的属性。
2045. 占位符 会优先引用 数据模板 中的属性。
205
206 {
207 name: {
208 first: '@FIRST',
209 middle: '@FIRST',
210 last: '@LAST',
211 full: '@first @middle @last'
212 }
213 }
214 // =>
215 {
216 "name": {
217 "first": "Charles",
218 "middle": "Brenda",
219 "last": "Lopez",
220 "full": "Charles Brenda Lopez"
221 }
222 }
223
224---
225
226
227## Mock
228
229### Mock.mock( rurl?, rtype?, template|function(options) )
230
231根据数据模板生成模拟数据。
232
233* **Mock.mock( template )**
234
235 根据数据模板生成模拟数据。
236
237* **Mock.mock( rurl, template )**
238
239 记录数据模板。当拦截到匹配 `rurl` 的 Ajax 请求时,将根据数据模板 `template` 生成模拟数据,并作为响应数据返回。
240
241* **Mock.mock( rurl, function(options) )**
242
243 记录用于生成响应数据的函数。当拦截到匹配 `rurl` 的 Ajax 请求时,函数 `function(options)` 将被执行,并把执行结果作为响应数据返回。
244
245* **Mock.mock( rurl, rtype, template )**
246
247 记录数据模板。当拦截到匹配 `rurl` 和 `rtype` 的 Ajax 请求时,将根据数据模板 `template` 生成模拟数据,并作为响应数据返回。
248
249* **Mock.mock( rurl, rtype, function(options) )**
250
251 记录用于生成响应数据的函数。当拦截到匹配 `rurl` 和 `rtype` 的 Ajax 请求时,函数 `function(options)` 将被执行,并把执行结果作为响应数据返回。
252
253**参数的含义和默认值**如下所示:
254
255* **参数 rurl**:可选。表示需要拦截的 URL,可以是 URL 字符串或 URL 正则。例如 `/\/domain\/list\.json/``'/domian/list.json'`
256* **参数 rtype**:可选。表示需要拦截的 Ajax 请求类型。例如 `GET``POST``PUT``DELETE` 等。
257* **参数 template**:可选。表示数据模板,可以是对象或字符串。例如 `{ 'data|1-10':[{}] }``'@EMAIL'`
258* **参数 function(options)**:可选。表示用于生成响应数据的函数。
259* **参数 options**:指向本次请求的 Ajax 选项集。
260
261下面是 Mock.mock() 的 5 种参数格式以及语法规范的使用示例:
262
263**示例1:**Mock.mock( template )
264
265<iframe width="100%" height="300" src="http://jsfiddle.net/Y3rg6/1/embedded/js,html,result" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
266
267**示例2:**Mock.mock( rurl, template )
268
269<iframe width="100%" height="300" src="http://jsfiddle.net/BeENf/3/embedded/js,html,result" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
270
271**示例3:**Mock.mock( rurl, function(options) )
272
273<iframe width="100%" height="300" src="http://jsfiddle.net/2s5t5/3/embedded/js,html,result" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
274
275**示例4:**Mock.mock( rurl, rtype, template )
276
277<iframe width="100%" height="300" src="http://jsfiddle.net/Eq68p/2/embedded/js,html,result" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
278
279**示例5:**Mock.mock( rurl, rtype, function(options) )
280
281<iframe width="100%" height="300" src="http://jsfiddle.net/6dpV5/4/embedded/js,html,result" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
282
283
284
285
286### Mock.mockjax(library)
287
288覆盖(拦截) Ajax 请求,目前内置支持 jQuery、Zepto、KISSY。
289
290对 jQuery Ajax 请求的拦截和响应,通过覆盖前置过滤器、选项 dataFilter 以及数据转换器实现,实现代码请问[这里](https://github.com/nuysoft/Mock/blob/master/src/mockjax.js#L5)。
291
292对 KISSY Ajax 请求的拦截和响应,则通过粗鲁地覆盖 KISSY.io(options) 实现,实现代码请问[这里](https://github.com/nuysoft/Mock/blob/master/src/mockjax.js#L72)。
293
294因为第三库 Ajax 的实现方式不尽相同,故目前只内置支持了实际开发中(本人和所服务的阿里) 常用的 jQuery、Zepto 和 KISSY。如果需要拦截其他第三方库的 Ajax 请求,可参考对 jQuery、Zepto 和 KISSY 的实现,覆盖 `Mock.mockjax(library)`
295
296通过方法 `Mock.mock( rurl, rtype, template|function(options) )` 设置的 URL 和数据模板的映射,均记录在属性 `Mock._mocked` 中,扩展时可从中获取 URL 对应的数据模板,进而生成和响应模拟数据。`Mock._mocked` 的数据结构为:
297
298 {
299 (rurl + rtype): {
300 rurl: rurl,
301 rtype: rtype,
302 template: template
303 },
304 ...
305 }
306
307<!-- 如果业务和场景需要,可以联系 [@墨智]()、[nuysoft](nuysoft@gmail.com) 提供对特定库的内置支持,不过最酷的做法是开发人员能够为 Mock.js 贡献代码。 -->
308<!-- 感谢 @麦少 同学对 Mock.mockjax(library) 的重构,并增加了对 Zepto.js 的支持。 -->
309
310### Mock.tpl(input, options, helpers, partials)
311
312* Mock.tpl(input)
313* Mock.tpl(input, options)
314* Mock.tpl(input, options, helpers)
315* Mock.tpl(input, options, helpers, partials)
316
317基于 Handlebars、Mustache 的 HTML 模板生成模拟数据。
318
319**参数的含义和默认值**如下所示:
320
321* **参数 input**:必选。可以是 HTML 模板,或者经过 Handlebars 解析的语法树(`Handlebars.parse(input)`)。将基于该参数生成模拟数据。
322* **参数 options**:可选。对象。称为“数据模板”,用于配置生成模拟数据的规则。例如 `{ 'email': '@EMAIL' }`,在生成模拟数据时,所有 `email` 属性对应的值将是一个邮件地址。
323* **参数 helpers**:可选。对象。表示局部 helper。全局 helper 会自动从 `Handlebars.helpers` 中读取。
324* **参数 partials**:可选。对象。表示局部子模板。全局子模板会自动从 `Handlebars.partials` 中读取。
325
326**使用示例**如下所示:
327
328 // 基于 HTML 模板生成模拟数据
329 Mock.tpl('this is {{title}}!')
330 // => {title: "title"}
331
332 // 基于 HTML 模板和数据模板生成模拟数据
333 Mock.tpl('this is {{title}}!', {
334 title: '@TITLE'
335 })
336 // => {title: "Guhwbgehq Isuzssx Ywvwt Dkp"}
337
338 // 基于 HTML 模板生成模拟数据,传入了局部命令。
339 Mock.tpl('this is {{title}}!', {}, {
340 title: function(){
341 return 'my title'
342 }
343 })
344 // => {title: "title"}
345
346 // 基于 HTML 模板生成模拟数据,传入了局部子模板。
347 Mock.tpl('{{> "sub-tpl"}}', {}, {}, {
348 'sub-tpl': '{{title}}'
349 })
350 // => {title: "title"}
351
352数据模板 `options` 可以在调用 Mock.tpl(input, options, helpers, partials) 时传入,也可以在 HTML 模板中通过 HTML 注释配置(为了避免侵入现有的代码和开发模式),格式为 `<!-- Mock {} -->` 。下面的 2 个示例演示了通过 HTML 注释配置数据模板的两种方式:集中配置、分散配置。
353
354**示例1:**在 HTML 模板中通过一个 HTML 注释**集中**配置数据模板。
355
356 var tpl = Mock.heredoc(function() {
357 /*!
358 {{email}}{{age}}
359 <!-- Mock {
360 email: '@EMAIL',
361 age: '@INT(1,100)'
362 } -->
363 */
364 })
365 var data = Mock.tpl(tpl)
366 console.log(JSON.stringify(data, null, 4))
367 // =>
368 {
369 "email": "t.lee@clark.net",
370 "age": 33
371 }
372
373**示例2:**在 HTML 模板中通过多个 HTML 注释**分散**配置数据模板。
374
375 var tpl = Mock.heredoc(function() {
376 /*!
377 {{email}}{{age}}
378 <!-- Mock {
379 email: '@EMAIL'
380 } -->
381 <!-- Mock { age: '@INT(1,100)' } -->
382 */
383 })
384 var data = Mock.tpl(tpl)
385 console.log(JSON.stringify(data, null, 4))
386 // =>
387 {
388 "email": "j.walker@brown.edu",
389 "age": 83
390 }
391
392
393### Mock.xtpl(input, options, helpers, partials)
394
395* Mock.xtpl(input)
396* Mock.xtpl(input, options)
397* Mock.xtpl(input, options, helpers)
398* Mock.xtpl(input, options, helpers, partials)
399
400基于 KISSY XTempalte 的 HTML 模板生成模拟数据。
401
402**参数的含义和默认值**如下所示:
403
404* **参数 input**:必选。可以是 HTML 模板,或者经过 KISSY XTempalte 解析的语法树(`XTemplate.compiler.parse(input)`)。将基于该参数生成模拟数据。
405* **参数 options**:可选。对象。称为“数据模板”,用于配置生成模拟数据的规则。例如 `{ 'email': '@EMAIL' }`,在生成模拟数据时,所有 `email` 属性对应的值将是一个邮件地址。
406* **参数 helpers**:可选。对象。表示局部命令。全局命令会自动从 `XTemplate.RunTime.commands` 中读取。
407* **参数 partials**:可选。对象。表示局部子模板。全局子模板会自动从 `XTemplate.RunTime.subTpls` 中读取。
408
409**使用示例**如下所示:
410
411 // 基于 HTML 模板生成模拟数据
412 Mock.xtpl('this is {{title}}!')
413 // => {title: "title"}
414
415 // 基于 HTML 模板和数据模板生成模拟数据
416 Mock.xtpl('this is {{title}}!', {
417 title: '@TITLE'
418 })
419 // => {title: "Guhwbgehq Isuzssx Ywvwt Dkp"}
420
421 // 基于 HTML 模板生成模拟数据,传入了局部命令。
422 Mock.xtpl('this is {{title}}!', {}, {
423 title: function(){
424 return 'my title'
425 }
426 })
427 // => {title: "title"}
428
429 // 基于 HTML 模板生成模拟数据,传入了局部子模板。
430 Mock.xtpl('{{include "sub-tpl"}}', {}, {}, {
431 'sub-tpl': '{{title}}'
432 })
433 // => {title: "title"}
434
435数据模板 `options` 可以在调用 Mock.xtpl(input, options, helpers, partials) 时传入,也可以在 HTML 模板中通过 HTML 注释配置(为了避免侵入现有的代码和开发模式),格式为 `<!-- Mock {} -->` 。下面的 2 个示例演示了通过 HTML 注释配置数据模板的两种方式:集中配置、分散配置。
436
437**示例1:**在 HTML 模板中通过一个 HTML 注释**集中**配置数据模板。
438
439 var tpl = Mock.heredoc(function() {
440 /*!
441 {{email}}{{age}}
442 <!-- Mock {
443 email: '@EMAIL',
444 age: '@INT(1,100)'
445 } -->
446 */
447 })
448 var data = Mock.xtpl(tpl)
449 console.log(JSON.stringify(data, null, 4))
450 // =>
451 {
452 "email": "t.lee@clark.net",
453 "age": 33
454 }
455
456**示例2:**在 HTML 模板中通过多个 HTML 注释**分散**配置数据模板。
457
458 var tpl = Mock.heredoc(function() {
459 /*!
460 {{email}}{{age}}
461 <!-- Mock {
462 email: '@EMAIL'
463 } -->
464 <!-- Mock { age: '@INT(1,100)' } -->
465 */
466 })
467 var data = Mock.xtpl(tpl)
468 console.log(JSON.stringify(data, null, 4))
469 // =>
470 {
471 "email": "j.walker@brown.edu",
472 "age": 83
473 }
474
475
476### Mock.heredoc(fn)
477
478* Mock.heredoc(fn)
479
480以直观、舒适、安全的方式书写(多行)HTML 模板。
481
482**使用示例**如下所示:
483
484 var tpl = Mock.heredoc(function() {
485 /*!
486 {{email}}{{age}}
487 <!-- Mock {
488 email: '@EMAIL',
489 age: '@INT(1,100)'
490 } -->
491 */
492 })
493 console.log(tpl)
494 // =>
495 "{{email}}{{age}}
496 <!-- Mock {
497 email: '@EMAIL',
498 age: '@INT(1,100)'
499 } -->"
500
501**相关阅读**
502
503* [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、
504
505## Mock.Random
506
507Mock.Random 是一个工具类,用于生成各种随机数据。Mock.Random 的方法在数据模板中称为“占位符”,引用格式为 `@占位符(参数 [, 参数])` 。例如:
508
509 var Random = Mock.Random;
510 Random.email()
511 // => "n.clark@miller.io"
512 Mock.mock('@EMAIL')
513 // => "y.lee@lewis.org"
514 Mock.mock( { email: '@EMAIL' } )
515 // => { email: "v.lewis@hall.gov" }
516
517可以在上面的例子中看到,直接调用 'Random.email()' 时方法名 `email()` 是小写的,而数据模板中的 `@EMAIL` 却是大写。这并非对数据模板中的占位符做了特殊处理,也非强制的编写方式,事实上在数据模板中使用小写的 `@email` 也可以达到同样的效果。不过,这是建议的编码风格,以便在阅读时从视觉上提高占位符的识别度,快速识别占位符和普通字符。
518
519在浏览器中,为了减少需要拼写的字符,Mock.js 把 Mock.Random 暴露给了 window 对象,使之成为全局变量,从而可以直接访问 Random。因此上面例子中的 `var Random = Mock.Random;` 可以省略。在后面的例子中,也将做同样的处理。
520
521> 在 Node.js 中,仍然需要通过 `Mock.Random` 访问。
522
523Mock.Random 提供的完整方法(占位符)如下:
524
525| Type | Method
526| ------------- | -----------------------------------------------------------------------------
527| Basics | boolean natural integer float character string range date time datetime now
528| Image | image dataImage
529| Color | color
530| Text | paragraph sentence word title
531| Name | first last name
532| Web | url domain email ip tld
533| Address | area region
534| Helpers | capitalize upper lower pick shuffle
535| Miscellaneous | guid id
536
537<script id="fixPlaceholderLink" type="text/javascript">
538 $('#fixPlaceholderLink').prev('table')
539 .find('td:nth-child(1)').each(function(index, td) {
540 $(td).contents().wrapAll(
541 $('<a>').attr('href', '#' + $(td).text())
542 )
543 })
544 .end()
545 .find('td:nth-child(2)').each(function(index, td) {
546 var methods = $(td).text().split(' ')
547 var links = $()
548 $(methods).each(function(mindex, m) {
549 links.push(
550 $('<a>').attr('href', '#' + m).text(m)[0]
551 )
552 if (mindex < methods.length - 1) {
553 links.push(
554 $('<span>').text(', ')[0]
555 )
556 }
557 })
558 $(td).empty().append(links)
559 })
560 .end()
561</script>
562
563Mock.Random 中的方法与数据模板的 `@占位符` 一一对应,在需要时可以为 Mock.Random 扩展方法,然后在数据模板中通过 `@扩展方法` 引用。例如:
564
565 Random.extend({
566 constellations: ['白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '双鱼座'],
567 constellation: function(date){
568 return this.pick(this.constellations)
569 }
570 })
571 Random.constellation()
572 // => "水瓶座"
573 Mock.mock('@CONSTELLATION')
574 // => "天蝎座"
575 Mock.mock({ constellation: '@CONSTELLATION'})
576 // => { constellation: "射手座" }
577
578下面是 Mock.Random 内置支持的方法说明。
579
580**你可以打开控制台,随意地试验这些方法。**
581
582### Basics
583
584#### Random.boolean(min, max, cur)
585
586* Random.boolean()
587* Random.boolean(min, max, cur)
588
589返回一个随机的布尔值。
590
591**参数的含义和默认值**如下所示:
592
593* 参数 min:可选。指示参数 cur 出现的概率。概率计算公式为 `min / (min + max)`。该参数的默认值为 1,即有 50% 的概率返回参数 cur。
594* 参数 max:可选。指示参数 cur 的相反值(!cur)出现的概率。概率计算公式为 `max / (min + max)`。该参数的默认值为 1,即有 50% 的概率返回参数 cur。
595* 参数 cur:可选。可选值为布尔值 true 或 false。如果未传入任何参数,则返回 true 和 false 的概率各为 50%。该参数没有默认值,在该方法的内部,依据原生方法 Math.random() 返回的(浮点)数来计算和返回布尔值,例如在最简单的情况下,返回值是表达式 `Math.random() >= 0.5` 的执行结果。
596
597**使用示例**如下所示:
598
599 Random.boolean()
600 // => true
601 Random.boolean(1, 9, true)
602 // => false
603 Random.bool()
604 // => false
605 Random.bool(1, 9, false)
606 // => true
607
608<!-- 事实上,原生方法 Math.random() 返回的随机(浮点)数的分布并不均匀,是货真价实的伪随机数,将来会替换为基于 ?? 来生成随机数。?? 对 Math.random() 的实现机制进行了分析和统计,并提供了随机数的参考实现,可以访问[这里](http://??)。
609TODO 统计 -->
610
611#### Random.natural(min, max)
612
613* Random.natural()
614* Random.natural(min)
615* Random.natural(min, max)
616
617返回一个随机的自然数(大于等于 0 的整数)。
618
619**参数的含义和默认值**如下所示:
620
621* 参数 min:可选。指示随机自然数的最小值。默认值为 0。
622* 参数 max:可选。指示随机自然数的最小值。默认值为 9007199254740992。
623
624**使用示例**如下所示:
625
626 Random.natural()
627 // => 1002794054057984
628 Random.natural(10000)
629 // => 71529071126209
630 Random.natural(60, 100)
631 // => 77
632
633#### Random.integer(min, max)
634
635* Random.integer()
636* Random.integer(min)
637* Random.integer(min, max)
638
639返回一个随机的整数。
640
641**参数的含义和默认值**如下所示:
642
643* 参数 min:可选。指示随机整数的最小值。默认值为 -9007199254740992。
644* 参数 max:可选。指示随机整数的最大值。默认值为 9007199254740992。
645
646**使用示例**如下所示:
647
648 Random.integer()
649 // => -3815311811805184
650 Random.integer(10000)
651 // => 4303764511003750
652 Random.integer(60,100)
653 // => 96
654
655#### Random.float(min, max, dmin, dmax)
656
657* Random.float()
658* Random.float(min)
659* Random.float(min, max)
660* Random.float(min, max, dmin)
661* Random.float(min, max, dmin, dmax)
662
663返回一个随机的浮点数。
664
665**参数的含义和默认值**如下所示:
666
667* 参数 min:可选。整数部分的最小值。默认值为 -9007199254740992。
668* 参数 max:可选。整数部分的最大值。默认值为 9007199254740992。
669* 参数 dmin:可选。小数部分位数的最小值。默认值为 0。
670* 参数 dmin:可选。小数部分位数的最大值。默认值为 17。
671
672**使用示例**如下所示:
673
674 Random.float()
675 // => -1766114241544192.8
676 Random.float(0)
677 // => 556530504040448.25
678 Random.float(60, 100)
679 // => 82.56779679549358
680 Random.float(60, 100, 3)
681 // => 61.718533677927894
682 Random.float(60, 100, 3, 5)
683 // => 70.6849
684
685#### Random.character(pool)
686
687返回一个随机字符。
688
689* Random.character()
690* Random.character('lower/upper/number/symbol')
691* Random.character(pool)
692
693**参数的含义和默认值**如下所示:
694
695* 参数 pool:可选。字符串。表示字符池,将从中选择一个字符返回。
696 * 如果传入 `'lower'``'upper'``'number'``'symbol'`,表示从内置的字符池从选取:
697
698 {
699 lower: "abcdefghijklmnopqrstuvwxyz",
700 upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
701 number: "0123456789",
702 symbol: "!@#$%^&*()[]"
703 }
704
705 * 如果未传入该参数,则从 `'lower' + 'upper' + 'number' + 'symbol'` 中随机选取一个字符返回。
706
707**使用示例**如下所示:
708
709 Random.character()
710 // => "P"
711 Random.character('lower')
712 // => "y"
713 Random.character('upper')
714 // => "X"
715 Random.character('number')
716 // => "1"
717 Random.character('symbol')
718 // => "&"
719 Random.character('aeiou')
720 // => "u"
721
722#### Random.string(pool, min, max)
723
724返回一个随机字符串。
725
726* Random.string()
727* Random.string( length )
728* Random.string( pool, length )
729* Random.string( min, max )
730* Random.string( pool, min, max )
731
732**参数的含义和默认值**如下所示:
733
734* 参数 pool:可选。字符串。表示字符池,将从中选择一个字符返回。
735 * 如果传入 `'lower'``'upper'``'number'``'symbol'`,表示从内置的字符池从选取:
736
737 {
738 lower: "abcdefghijklmnopqrstuvwxyz",
739 upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
740 number: "0123456789",
741 symbol: "!@#$%^&*()[]"
742 }
743
744 * 如果未传入该参数,则从 `'lower' + 'upper' + 'number' + 'symbol'` 中随机选取一个字符返回。
745* 参数 min:可选。随机字符串的最小长度。默认值为 3。
746* 参数 max:可选。随机字符串的最大长度。默认值为 7。
747
748**使用示例**如下所示:
749
750 Random.string()
751 // => "pJjDUe"
752 Random.string( 5 )
753 // => "GaadY"
754 Random.string( 'lower', 5 )
755 // => "jseqj"
756 Random.string( 7, 10 )
757 // => "UuGQgSYk"
758 Random.string( 'aeiou', 1, 3 )
759 // => "ea"
760
761#### Random.range(start, stop, step)
762
763* Random.range(stop)
764* Random.range(start, stop)
765* Random.range(start, stop, step)
766
767返回一个整型数组。
768
769**参数的含义和默认值**如下所示:
770
771* 参数 start:必选。数组中整数的起始值。
772* 参数 stop:可选。数组中整数的结束值(不包含在返回值中)。
773* 参数 step:可选。数组中整数之间的步长。默认值为 1。
774
775**使用示例**如下所示:
776
777 Random.range(10)
778 // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
779 Random.range(3, 7)
780 // => [3, 4, 5, 6]
781 Random.range(1, 10, 2)
782 // => [1, 3, 5, 7, 9]
783 Random.range(1, 10, 3)
784 // => [1, 4, 7]
785
786#### Random.date(format)
787
788* Random.date()
789* Random.date(format)
790
791返回一个随机的日期字符串。
792
793**参数的含义和默认值**如下所示:
794
795* 参数 format:可选。指示生成的日期字符串的格式。默认值为 `yyyy-MM-dd`。可选的占位符参考自 [Ext.Date](http://docs.sencha.com/ext-js/4-1/#!/api/Ext.Date),如下所示:
796
797| Format | Description | Example
798| ------- | ----------------------------------------------------------- | --------------
799| yyyy | A full numeric representation of a year, 4 digits | 1999 or 2003
800| yy | A two digit representation of a year | 99 or 03
801| y | A two digit representation of a year | 99 or 03
802| MM | Numeric representation of a month, with leading zeros | 01 to 12
803| M | Numeric representation of a month, without leading zeros | 1 to 12
804| dd | Day of the month, 2 digits with leading zeros | 01 to 31
805| d | Day of the month without leading zeros | 1 to 31
806| HH | 24-hour format of an hour with leading zeros | 00 to 23
807| H | 24-hour format of an hour without leading zeros | 0 to 23
808| hh | 12-hour format of an hour without leading zeros | 1 to 12
809| h | 12-hour format of an hour with leading zeros | 01 to 12
810| mm | Minutes, with leading zeros | 00 to 59
811| m | Minutes, without leading zeros | 0 to 59
812| ss | Seconds, with leading zeros | 00 to 59
813| s | Seconds, without leading zeros | 0 to 59
814| SS | Milliseconds, with leading zeros | 000 to 999
815| S | Milliseconds, without leading zeros | 0 to 999
816| A | Uppercase Ante meridiem and Post meridiem | AM or PM
817| a | Lowercase Ante meridiem and Post meridiem | am or pm
818| T | Milliseconds, since 1970-1-1 00:00:00 UTC | 759883437303
819
820**使用示例**如下所示:
821
822 Random.date()
823 // => "2002-10-23"
824 Random.date('yyyy-MM-dd')
825 // => "1983-01-29"
826 Random.date('yy-MM-dd')
827 // => "79-02-14"
828 Random.date('y-MM-dd')
829 // => "81-05-17"
830 Random.date('y-M-d')
831 // => "84-6-5"
832
833#### Random.time(format)
834
835* Random.time()
836* Random.time(format)
837
838返回一个随机的时间字符串。
839
840**参数的含义和默认值**如下所示:
841
842* 参数 format:可选。指示生成的时间字符串的格式。默认值为 `HH:mm:ss`。可选的占位符参考自 [Ext.Date](http://docs.sencha.com/ext-js/4-1/#!/api/Ext.Date),请参见 [Random.date(format)](#date)。
843
844**使用示例**如下所示:
845
846 Random.time()
847 // => "00:14:47"
848 Random.time('A HH:mm:ss')
849 // => "PM 20:47:37"
850 Random.time('a HH:mm:ss')
851 // => "pm 17:40:00"
852 Random.time('HH:mm:ss')
853 // => "03:57:53"
854 Random.time('H:m:s')
855 // => "3:5:13"
856
857#### Random.datetime(format)
858
859* Random.datetime()
860* Random.datetime(format)
861
862返回一个随机的日期和时间字符串。
863
864**参数的含义和默认值**如下所示:
865
866* 参数 format:可选。指示生成的日期和时间字符串的格式。默认值为 `yyyy-MM-dd HH:mm:ss`。可选的占位符参考自 [Ext.Date](http://docs.sencha.com/ext-js/4-1/#!/api/Ext.Date),请参见 [Random.date(format)](#date)。
867
868**使用示例**如下所示:
869
870 Random.datetime()
871 // => "1977-11-17 03:50:15"
872 Random.datetime('yyyy-MM-dd A HH:mm:ss')
873 // => "1976-04-24 AM 03:48:25"
874 Random.datetime('yy-MM-dd a HH:mm:ss')
875 // => "73-01-18 pm 22:12:32"
876 Random.datetime('y-MM-dd HH:mm:ss')
877 // => "79-06-24 04:45:16"
878 Random.datetime('y-M-d H:m:s')
879 // => "02-4-23 2:49:40"
880
881#### Random.now(unit, format)
882
883* Ranndom.now(unit, format)
884* Ranndom.now()
885* Ranndom.now(format)
886* Ranndom.now(unit)
887
888返回当前的日期和时间字符串。
889
890**参数的含义和默认值**如下所示:
891
892* 参数 unit:可选。表示时间单元,用于对当前日期和时间进行格式化。可选值有:`year``month``week``day``hour``minute``second``week`,默认不会格式化。
893* 参数 format:可选。指示生成的日期和时间字符串的格式。默认值为 `yyyy-MM-dd HH:mm:ss`。可选的占位符参考自 [Ext.Date](http://docs.sencha.com/ext-js/4-1/#!/api/Ext.Date),请参见 [Random.date(format)](#date)。
894
895> Random.now() 的实现参考了 (Moment.js)[http://momentjs.cn/docs/#/manipulating/start-of/]。
896
897**使用示例**如下所示:
898
899 Random.now()
900 // => "2014-04-29 20:08:38 "
901 Random.now('day', 'yyyy-MM-dd HH:mm:ss SS')
902 // => "2014-04-29 00:00:00 000"
903 Random.now('day')
904 // => "2014-04-29 00:00:00 "
905 Random.now('yyyy-MM-dd HH:mm:ss SS')
906 // => "2014-04-29 20:08:38 157"
907
908 Random.now('year')
909 // => "2014-01-01 00:00:00"
910 Random.now('month')
911 // => "2014-04-01 00:00:00"
912 Random.now('week')
913 // => "2014-04-27 00:00:00"
914 Random.now('day')
915 // => "2014-04-29 00:00:00"
916 Random.now('hour')
917 // => "2014-04-29 20:00:00"
918 Random.now('minute')
919 // => "2014-04-29 20:08:00"
920 Random.now('second')
921 // => "2014-04-29 20:08:38"
922
923### Image
924
925#### Random.image(size, background, foreground, format, text)
926
927* Random.image()
928* Random.image(size)
929* Random.image(size, background)
930* Random.image(size, background, text)
931* Random.image(size, background, foreground, text)
932* Random.image(size, background, foreground, format, text)
933
934生成一个随机的图片地址。
935
936> **Random.image()** 用于生成高度自定义的图片地址,一般情况下,应该使用更简单的 [**Random.dataImage()**](#dataImage)。
937
938**参数的含义和默认值**如下所示:
939
940* 参数 size:可选。指示图片的宽高,格式为 `'宽x高'`。默认从下面的数组中随机读取一个:
941
942 [
943 '300x250', '250x250', '240x400', '336x280',
944 '180x150', '720x300', '468x60', '234x60',
945 '88x31', '120x90', '120x60', '120x240',
946 '125x125', '728x90', '160x600', '120x600',
947 '300x600'
948 ]
949
950* 参数 background:可选。指示图片的背景色。默认值为 '#000000'。
951* 参数 foreground:可选。指示图片的前景色(文件)。默认值为 '#FFFFFF'。
952* 参数 format:可选。指示图片的格式。默认值为 'png',可选值包括:'png'、'gif'、'jpg'。
953* 参数 text:可选。指示图片上的文字。默认为参数 size。
954
955**使用示例**如下所示:
956
957 Random.image()
958 // => "http://dummyimage.com/125x125"
959 Random.image('200x100')
960 // => "http://dummyimage.com/200x100"
961 Random.image('200x100', '#fb0a2a')
962 // => "http://dummyimage.com/200x100/fb0a2a"
963 Random.image('200x100', '#02adea', 'Hello')
964 // => "http://dummyimage.com/200x100/02adea&text=Hello"
965 Random.image('200x100', '#00405d', '#FFF', 'Mock.js')
966 // => "http://dummyimage.com/200x100/00405d/FFF&text=Mock.js"
967 Random.image('200x100', '#ffcc33', '#FFF', 'png', '!')
968 // => "http://dummyimage.com/200x100/ffcc33/FFF.png&text=!"
969
970生成的路径所对应的图片如下所示:
971
972![](http://dummyimage.com/125x125)
973![](http://dummyimage.com/200x100)
974![](http://dummyimage.com/200x100/fb0a2a)
975![](http://dummyimage.com/200x100/02adea&text=Hello)
976![](http://dummyimage.com/200x100/00405d/FFF&text=Mock.js)
977![](http://dummyimage.com/200x100/ffcc33/FFF.png&text=!)
978
979#### Random.dataImage(size, text)
980
981* Random.dataImage()
982* Random.dataImage(size)
983* Random.dataImage(size, text)
984
985生成一段随机的 Base64 图片编码。
986
987> 如果需要生成高度自定义的图片,请使用 [**Random.image()**](#image)。
988
989**参数的含义和默认值**如下所示:
990
991* 参数 size:可选。指示图片的宽高,格式为 `'宽x高'`。默认从下面的数组中随机读取一个:
992
993 [
994 '300x250', '250x250', '240x400', '336x280',
995 '180x150', '720x300', '468x60', '234x60',
996 '88x31', '120x90', '120x60', '120x240',
997 '125x125', '728x90', '160x600', '120x600',
998 '300x600'
999 ]
1000
1001* 参数 text:可选。指示图片上的文字。默认为参数 size。
1002
1003> 图片的背景色是随机的,取值范围参考自 <http://brandcolors.net/>。
1004
1005**使用示例**如下所示:
1006
1007 Random.dataImage()
1008 // => "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH0AAAB9CAYAAACPgGwlAAAFJElEQVR4Xu2dS0hUURzG/1Yqlj2otJe10AqCoiJaFFTUpgcUhLaKCIogKCEiCl0U1SIIF1EIQlFEtCmkpbWSHlAQYRYUlI9Ie6nYmI9hfIx1LpzL3PGO/aeuM/r/f7PRufe7d873/ea75xw3ZjTumDtMeKlKIAPQVfF2zAK6PuaArpA5oAO6xgQUesacDugKE1BoGU0HdIUJKLSMpgO6wgQUWkbTAV1hAgoto+mArjABhZbRdEBXmIBCy2g6oCtMQKFlNB3QFSag0DKaDugKE1BoGU0HdIUJKLSMpgO6wgQUWkbTAV1hAgoto+mArjABhZbRdEBXmIBCy2g6oCtMQKFlNB3QFSag0DKaDugKE1BoGU0HdIUJKLSMpgO6wgQUWkbTAV1hAgoto+mArjABhZbRdEBXmIBCy2g6oCtMQKFlNB3QFSag0DKaDugKE1BoGU0HdIUJKLQ8bpo+fft+ylxYSJ23LvpisOfNST/N7ENniYa9/0xy4GsTdT+6+09Yx9t4/slEgovSDt2EO3P3YcoqWuUMsWln3oihFlTWUlbhSvf4UKid2iqOUfhVrXussKZ9xHXh10/oW1lxUnmNt/EkNXimOK3QTTtn7Sv1DDUees66rTT/3B0a/NFCvc9raOqf9+YL0PfiIX0/f8ADPdrXTZEPde6xyMd66rx5wXlvnwThN8/cL4ttc7S3i0L3rjqaVI2HyWdMZGmFbhwtvv7cgZm7ZS9NyS/wbboBb1ttwQy2tdLng2s90OOPxSa24FI15azZTAOtDdRyZAOZe84ru0GTps2g0P1r7pcjVeMZE5rMm6Yduh3nktt1CaHHesk/XUW5W4sp8v4lfTm5ywN9eCBCQz/baOBLE0Ua3rgg4z/DPCUmz5xD2SvWU6IpIBXjYTIKXDahoNtHvUmho/KMZ5HmN6f31FZT2+Wjbmix12dkZtNoTwYO9P8dT+A0mTecMNBNwPmnKmnyrDyKhxnv1U4B0d5f9KmkyHPaPinMwfYrJxKu7v8GPajxMDkFKpsQ0JMJ2KZjmm8e9817CjxNt/O4Odjf+JZaj2/zDXQ06EGNJ1CSSdws7dDNAsvsr7OXr3UWVeG6x87wv5WXOD9jAzZbtf7md669nscP3KbOLa2gaE+Xc27axl2UWbB0xLxvFmnmuJnTzU/7e+wuIJXjSYJToNK0Q/ebi41Du3Xz20bZBGJX3fH3Mav0jqpyd9Xvt3o3W0Ezt492H/tZQY8nUIpJ3izt0J39s8/L7q9N03NWb/LVhOuferZyWYuX0WDnD2evHv+XOPs5sdc4+/RFRX+eECFnn25eqRpPkpwClacdeqBucDNWAoDOikmWCNBl8WS5AXRWTLJEgC6LJ8sNoLNikiUCdFk8WW4AnRWTLBGgy+LJcgPorJhkiQBdFk+WG0BnxSRLBOiyeLLcADorJlkiQJfFk+UG0FkxyRIBuiyeLDeAzopJlgjQZfFkuQF0VkyyRIAuiyfLDaCzYpIlAnRZPFluAJ0VkywRoMviyXID6KyYZIkAXRZPlhtAZ8UkSwTosniy3AA6KyZZIkCXxZPlBtBZMckSAbosniw3gM6KSZYI0GXxZLkBdFZMskSALosnyw2gs2KSJQJ0WTxZbgCdFZMsEaDL4slyA+ismGSJAF0WT5YbQGfFJEsE6LJ4stwAOismWSJAl8WT5QbQWTHJEgG6LJ4sN4DOikmWCNBl8WS5AXRWTLJEgC6LJ8sNoLNikiUCdFk8WW4AnRWTLNFvXskYA3TG3JwAAAAASUVORK5CYII="
1009
1010![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH0AAAB9CAYAAACPgGwlAAAFJElEQVR4Xu2dS0hUURzG/1Yqlj2otJe10AqCoiJaFFTUpgcUhLaKCIogKCEiCl0U1SIIF1EIQlFEtCmkpbWSHlAQYRYUlI9Ie6nYmI9hfIx1LpzL3PGO/aeuM/r/f7PRufe7d873/ea75xw3ZjTumDtMeKlKIAPQVfF2zAK6PuaArpA5oAO6xgQUesacDugKE1BoGU0HdIUJKLSMpgO6wgQUWkbTAV1hAgoto+mArjABhZbRdEBXmIBCy2g6oCtMQKFlNB3QFSag0DKaDugKE1BoGU0HdIUJKLSMpgO6wgQUWkbTAV1hAgoto+mArjABhZbRdEBXmIBCy2g6oCtMQKFlNB3QFSag0DKaDugKE1BoGU0HdIUJKLSMpgO6wgQUWkbTAV1hAgoto+mArjABhZbRdEBXmIBCy2g6oCtMQKFlNB3QFSag0DKaDugKE1BoGU0HdIUJKLQ8bpo+fft+ylxYSJ23LvpisOfNST/N7ENniYa9/0xy4GsTdT+6+09Yx9t4/slEgovSDt2EO3P3YcoqWuUMsWln3oihFlTWUlbhSvf4UKid2iqOUfhVrXussKZ9xHXh10/oW1lxUnmNt/EkNXimOK3QTTtn7Sv1DDUees66rTT/3B0a/NFCvc9raOqf9+YL0PfiIX0/f8ADPdrXTZEPde6xyMd66rx5wXlvnwThN8/cL4ttc7S3i0L3rjqaVI2HyWdMZGmFbhwtvv7cgZm7ZS9NyS/wbboBb1ttwQy2tdLng2s90OOPxSa24FI15azZTAOtDdRyZAOZe84ru0GTps2g0P1r7pcjVeMZE5rMm6Yduh3nktt1CaHHesk/XUW5W4sp8v4lfTm5ywN9eCBCQz/baOBLE0Ua3rgg4z/DPCUmz5xD2SvWU6IpIBXjYTIKXDahoNtHvUmho/KMZ5HmN6f31FZT2+Wjbmix12dkZtNoTwYO9P8dT+A0mTecMNBNwPmnKmnyrDyKhxnv1U4B0d5f9KmkyHPaPinMwfYrJxKu7v8GPajxMDkFKpsQ0JMJ2KZjmm8e9817CjxNt/O4Odjf+JZaj2/zDXQ06EGNJ1CSSdws7dDNAsvsr7OXr3UWVeG6x87wv5WXOD9jAzZbtf7md669nscP3KbOLa2gaE+Xc27axl2UWbB0xLxvFmnmuJnTzU/7e+wuIJXjSYJToNK0Q/ebi41Du3Xz20bZBGJX3fH3Mav0jqpyd9Xvt3o3W0Ezt492H/tZQY8nUIpJ3izt0J39s8/L7q9N03NWb/LVhOuferZyWYuX0WDnD2evHv+XOPs5sdc4+/RFRX+eECFnn25eqRpPkpwClacdeqBucDNWAoDOikmWCNBl8WS5AXRWTLJEgC6LJ8sNoLNikiUCdFk8WW4AnRWTLBGgy+LJcgPorJhkiQBdFk+WG0BnxSRLBOiyeLLcADorJlkiQJfFk+UG0FkxyRIBuiyeLDeAzopJlgjQZfFkuQF0VkyyRIAuiyfLDaCzYpIlAnRZPFluAJ0VkywRoMviyXID6KyYZIkAXRZPlhtAZ8UkSwTosniy3AA6KyZZIkCXxZPlBtBZMckSAbosniw3gM6KSZYI0GXxZLkBdFZMskSALosnyw2gs2KSJQJ0WTxZbgCdFZMsEaDL4slyA+ismGSJAF0WT5YbQGfFJEsE6LJ4stwAOismWSJAl8WT5QbQWTHJEgG6LJ4sN4DOikmWCNBl8WS5AXRWTLJEgC6LJ8sNoLNikiUCdFk8WW4AnRWTLNFvXskYA3TG3JwAAAAASUVORK5CYII=)
1011
1012因为图片的 Base64 编码比较长,下面只显示生成的图片效果。
1013
1014 Random.dataImage('200x100')
1015
1016<img id="dataImage_size">
1017<script type="text/javascript">
1018 $('#dataImage_size').prop('src', Random.dataImage('200x100'))
1019</script>
1020
1021 Random.dataImage('300x100', 'Hello Mock.js!')
1022<img id="dataImage_size_text">
1023<script type="text/javascript">
1024 $('#dataImage_size_text').prop('src', Random.dataImage('300x100', 'Hello Mock.js!'))
1025</script>
1026
1027### Color
1028
1029#### Random.color()
1030
1031* Random.color()
1032
1033随机生成一个颜色,格式为 '#RRGGBB'。
1034
1035**使用示例**如下所示:
1036
1037 Random.color()
1038 // => "#3538b2"
1039
1040### Helpers
1041
1042#### Random.capitalize(word)
1043
1044* Random.capitalize(word)
1045
1046把字符串的第一个字母转换为大写。
1047
1048**使用示例**如下所示:
1049
1050 Random.capitalize('hello')
1051 // => "Hello"
1052
1053#### Random.upper(str)
1054
1055* Random.upper(str)
1056
1057把字符串转换为大写。
1058
1059**使用示例**如下所示:
1060
1061 Random.upper('hello')
1062 // => "HELLO"
1063
1064#### Random.lower(str)
1065
1066* Random.lower(str)
1067
1068把字符串转换为小写。
1069
1070**使用示例**如下所示:
1071
1072 Random.lower('HELLO')
1073 // => "hello"
1074
1075#### Random.pick(arr)
1076
1077* Random.pick(arr)
1078
1079从数组中随机选取一个元素,并返回。
1080
1081**使用示例**如下所示:
1082
1083 Random.pick(['a', 'e', 'i', 'o', 'u'])
1084 // => "o"
1085
1086#### Random.shuffle(arr)
1087
1088* Random.shuffle(arr)
1089
1090打乱数组中元素的顺序,并返回。
1091
1092**使用示例**如下所示:
1093
1094 Random.shuffle(['a', 'e', 'i', 'o', 'u'])
1095 // => ["o", "u", "e", "i", "a"]
1096
1097### Text
1098
1099#### Random.paragraph(len)
1100
1101* Random.paragraph()
1102* Random.paragraph(len)
1103* Random.paragraph(min, max)
1104
1105随机生成一段文本。
1106
1107**参数的含义和默认值**如下所示:
1108
1109* 参数 len:可选。指示文本中句子的个数。默认值为 3 到 7 之间的随机数。
1110* 参数 min:可选。指示文本中句子的最小个数。默认值为 3。
1111* 参数 max:可选。指示文本中句子的最大个数。默认值为 7。
1112
1113**使用示例**如下所示:
1114
1115 Random.paragraph()
1116 // => "Yohbjjz psxwibxd jijiccj kvemj eidnus disnrst rcconm bcjrof tpzhdo ncxc yjws jnmdmty. Dkmiwza ibudbufrnh ndmcpz tomdyh oqoonsn jhoy rueieihtt vsrjpudcm sotfqsfyv mjeat shnqmslfo oirnzu cru qmpt ggvgxwv jbu kjde. Kzegfq kigj dtzdd ngtytgm comwwoox fgtee ywdrnbam utu nyvlyiv tubouw lezpkmyq fkoa jlygdgf pgv gyerges wbykcxhwe bcpmt beqtkq. Mfxcqyh vhvpovktvl hrmsgfxnt jmnhyndk qohnlmgc sicmlnsq nwku dxtbmwrta omikpmajv qda qrn cwoyfaykxa xqnbv bwbnyov hbrskzt. Pdfqwzpb hypvtknt bovxx noramu xhzam kfb ympmebhqxw gbtaszonqo zmsdgcku mjkjc widrymjzj nytudruhfr uudsitbst cgmwewxpi bye. Eyseox wyef ikdnws weoyof dqecfwokkv svyjdyulk glusauosnu achmrakky kdcfp kujrqcq xojqbxrp mpfv vmw tahxtnw fhe lcitj."
1117
1118 Random.paragraph(2)
1119 // => "Dlpec hnwvovvnq slfehkf zimy qpxqgy vwrbi mok wozddpol umkek nffjcmk gnqhhvm ztqkvjm kvukg dqubvqn xqbmoda. Vdkceijr fhhyemx hgkruvxuvr kuez wmkfv lusfksuj oewvvf cyw tfpo jswpseupm ypybap kwbofwg uuwn rvoxti ydpeeerf."
1120
1121 Random.paragraph(1, 3)
1122 // => "Qdgfqm puhxle twi lbeqjqfi bcxeeecu pqeqr srsx tjlnew oqtqx zhxhkvq pnjns eblxhzzta hifj csvndh ylechtyu."
1123
1124#### Random.sentence(len)
1125
1126* Random.sentence()
1127* Random.sentence(len)
1128* Random.sentence(min, max)
1129
1130随机生成一个句子,第一个的单词的首字母大写。
1131
1132**参数的含义和默认值**如下所示:
1133
1134* 参数 len:可选。指示句子中单词的个数。默认值为 12 到 18 之间的随机数。
1135* 参数 min:可选。指示句子中单词的最小个数。默认值为 12。
1136* 参数 max:可选。指示句子中单词的最大个数。默认值为 18。
1137
1138**使用示例**如下所示:
1139
1140 Random.sentence()
1141 // => "Jovasojt qopupwh plciewh dryir zsqsvlkga yeam."
1142 Random.sentence(5)
1143 // => "Fwlymyyw htccsrgdk rgemfpyt cffydvvpc ycgvno."
1144 Random.sentence(3, 5)
1145 // => "Mgl qhrprwkhb etvwfbixm jbqmg."
1146
1147#### Random.word(len)
1148
1149* Random.word()
1150* Random.word(len)
1151* Random.word(min, max)
1152
1153随机生成一个单词。
1154
1155**参数的含义和默认值**如下所示:
1156
1157* 参数 len:可选。指示单词中字符的个数。默认值为 3 到 10 之间的随机数。
1158* 参数 min:可选。指示单词中字符的最小个数。默认值为 3。
1159* 参数 max:可选。指示单词中字符的最大个数。默认值为 10。
1160
1161**使用示例**如下所示:
1162
1163 Random.word()
1164 // => "fxpocl"
1165 Random.word(5)
1166 // => "xfqjb"
1167 Random.word(3, 5)
1168 // => "kemh"
1169
1170> 目前单词中的字符是随机的小写字母,未来会根据词法生成“可读”的单词。
1171
1172#### Random.title(len)
1173
1174* Random.title()
1175* Random.title(len)
1176* Random.title(min, max)
1177
1178随机生成一句标题,其中每个单词的首字母大写。
1179
1180**参数的含义和默认值**如下所示:
1181
1182* 参数 len:可选。指示单词中字符的个数。默认值为 3 到 7 之间的随机数。
1183* 参数 min:可选。指示单词中字符的最小个数。默认值为 3。
1184* 参数 max:可选。指示单词中字符的最大个数。默认值为 7。
1185
1186**使用示例**如下所示:
1187
1188 Random.title()
1189 // => "Rduqzr Muwlmmlg Siekwvo Ktn Nkl Orn"
1190 Random.title(5)
1191 // => "Ahknzf Btpehy Xmpc Gonehbnsm Mecfec"
1192 Random.title(3, 5)
1193 // => "Hvjexiondr Pyickubll Owlorjvzys Xfnfwbfk"
1194
1195### Name
1196
1197#### Random.first()
1198
1199* Random.first()
1200
1201随机生成一个常见的英文名。
1202
1203**使用示例**如下所示:
1204
1205 Random.first()
1206 // => "Nancy"
1207
1208#### Random.last()
1209
1210* Random.last()
1211
1212随机生成一个常见的英文姓。
1213
1214**使用示例**如下所示:
1215
1216 Random.last()
1217 // => "Martinez"
1218
1219#### Random.name()
1220
1221* Random.name()
1222* Random.name(middle)
1223
1224随机生成一个常见的英文姓名。
1225
1226**参数的含义和默认值**如下所示:
1227
1228* 参数 middle:可选。布尔值。指示是否生成中间名。
1229
1230**使用示例**如下所示:
1231
1232 Random.name()
1233 // => "Larry Wilson"
1234 Random.name(true)
1235 // => "Helen Carol Martinez"
1236
1237### Web
1238
1239#### Random.url()
1240
1241* Random.url()
1242
1243随机生成一个 URL。
1244
1245**使用示例**如下所示:
1246
1247 Random.url()
1248 // => "http://vrcq.edu/ekqtyfi"
1249
1250#### Random.domain()
1251
1252* Random.domain()
1253
1254随机生成一个域名。
1255
1256**使用示例**如下所示:
1257
1258 Random.domain()
1259 // => "kozfnb.org"
1260
1261#### Random.email()
1262
1263* Random.email()
1264
1265随机生成一个邮件地址。
1266
1267**使用示例**如下所示:
1268
1269 Random.email()
1270 // => "x.davis@jackson.edu"
1271
1272#### Random.ip()
1273
1274* Random.ip()
1275
1276随机生成一个 IP 地址。
1277
1278**使用示例**如下所示:
1279
1280 Random.ip()
1281 // => "34.206.109.169"
1282
1283#### Random.tld()
1284
1285* Random.tld()
1286
1287随机生成一个顶级域名。
1288
1289**使用示例**如下所示:
1290
1291 Random.tld()
1292 // => "net"
1293
1294### Address
1295
1296#### Random.area()
1297
1298* Random.area()
1299
1300随机生成一个(中国)大区。
1301
1302**使用示例**如下所示:
1303
1304 Random.area()
1305 // => "华北"
1306
1307#### Random.region()
1308
1309* Random.region()
1310
1311随机生成一个(中国)省(或直辖市、自治区、特别行政区)。
1312
1313**使用示例**如下所示:
1314
1315 Random.region()
1316 // => "辽宁省"
1317
1318### Miscellaneous
1319
1320#### Random.guid()
1321
1322* Random.guid()
1323
1324随机生成一个 GUID。
1325
1326**使用示例**如下所示:
1327
1328 Random.guid()
1329 // => "662C63B4-FD43-66F4-3328-C54E3FF0D56E"
1330
1331#### Random.id()
1332
1333* Random.id()
1334
1335随机生成一个 18 位身份证。
1336
1337**使用示例**如下所示:
1338
1339 Random.id()
1340 // => "420000200710091854"
1341
1342#### Random.increment(step)
1343
1344生成一个全局的自增整数。
1345
1346* Random.increment(step)
1347
1348参数的含义和默认值如下所示:
1349
1350* 参数 step:可选。整数自增的步长。默认值为 1。
1351
1352使用示例如下所示:
1353
1354 Random.increment()
1355 // => 1
1356 Random.increment(100)
1357 // => 101
1358 Random.increment(1000)
1359 // => 1101
1360