test.mock.spec.dpd.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. /* global require, chai, describe, before, it */
  2. // 数据占位符定义(Data Placeholder Definition,DPD)
  3. var expect = chai.expect
  4. var Mock, $, _
  5. describe('DPD', function() {
  6. before(function(done) {
  7. require(['mock', 'underscore', 'jquery'], function() {
  8. Mock = arguments[0]
  9. _ = arguments[1]
  10. $ = arguments[2]
  11. expect(Mock).to.not.equal(undefined)
  12. expect(_).to.not.equal(undefined)
  13. expect($).to.not.equal(undefined)
  14. done()
  15. })
  16. })
  17. describe('Reference', function() {
  18. it('@EMAIL', function() {
  19. var data = Mock.mock(this.test.title)
  20. expect(data).to.not.equal(this.test.title)
  21. })
  22. })
  23. describe('Priority', function() {
  24. it('@EMAIL', function() {
  25. var data = Mock.mock({
  26. email: 'nuysoft@gmail.com',
  27. name: '@EMAIL'
  28. })
  29. this.test.title += ' => ' + data.name
  30. expect(data.name).to.not.equal(data.email)
  31. })
  32. it('@email', function() {
  33. var data = Mock.mock({
  34. email: 'nuysoft@gmail.com',
  35. name: '@email'
  36. })
  37. this.test.title += ' => ' + data.name
  38. expect(data.name).to.equal(data.email)
  39. })
  40. })
  41. describe('Escape', function() {
  42. it('\@EMAIL', function() {
  43. var data = Mock.mock(this.test.title)
  44. this.test.title += ' => ' + data
  45. expect(data).to.not.equal(this.test.title)
  46. })
  47. it('\\@EMAIL', function() {
  48. var data = Mock.mock(this.test.title)
  49. this.test.title += ' => ' + data
  50. expect(data).to.not.equal(this.test.title)
  51. })
  52. it('\\\@EMAIL', function() {
  53. var data = Mock.mock(this.test.title)
  54. this.test.title += ' => ' + data
  55. expect(data).to.not.equal(this.test.title)
  56. })
  57. it('\\\\@EMAIL', function() {
  58. var data = Mock.mock(this.test.title)
  59. this.test.title += ' => ' + data
  60. expect(data).to.not.equal(this.test.title)
  61. })
  62. })
  63. describe('Path', function() {
  64. it('Absolute Path', function() {
  65. var data = Mock.mock({
  66. id: '@UUID',
  67. children: [{
  68. parentId: '@/id'
  69. }],
  70. child: {
  71. parentId: '@/id'
  72. }
  73. })
  74. expect(data.children[0]).to.have.property('parentId', data.id)
  75. expect(data.child).to.have.property('parentId', data.id)
  76. })
  77. it('Relative Path', function() {
  78. var data = Mock.mock({
  79. id: '@UUID',
  80. children: [{
  81. parentId: '@../../id'
  82. }],
  83. child: {
  84. parentId: '@../id'
  85. }
  86. })
  87. expect(data.children[0]).to.have.property('parentId', data.id)
  88. expect(data.child).to.have.property('parentId', data.id)
  89. })
  90. })
  91. describe('Complex', function() {
  92. var tpl = {
  93. basics: {
  94. boolean1: '@BOOLEAN',
  95. boolean2: '@BOOLEAN(1, 9, true)',
  96. natural1: '@NATURAL',
  97. natural2: '@NATURAL(10000)',
  98. natural3: '@NATURAL(60, 100)',
  99. integer1: '@INTEGER',
  100. integer2: '@INTEGER(10000)',
  101. integer3: '@INTEGER(60, 100)',
  102. float1: '@FLOAT',
  103. float2: '@FLOAT(0)',
  104. float3: '@FLOAT(60, 100)',
  105. float4: '@FLOAT(60, 100, 3)',
  106. float5: '@FLOAT(60, 100, 3, 5)',
  107. character1: '@CHARACTER',
  108. character2: '@CHARACTER("lower")',
  109. character3: '@CHARACTER("upper")',
  110. character4: '@CHARACTER("number")',
  111. character5: '@CHARACTER("symbol")',
  112. character6: '@CHARACTER("aeiou")',
  113. string1: '@STRING',
  114. string2: '@STRING(5)',
  115. string3: '@STRING("lower",5)',
  116. string4: '@STRING(7, 10)',
  117. string5: '@STRING("aeiou", 1, 3)',
  118. range1: '@RANGE(10)',
  119. range2: '@RANGE(3, 7)',
  120. range3: '@RANGE(1, 10, 2)',
  121. range4: '@RANGE(1, 10, 3)',
  122. date: '@DATE',
  123. time: '@TIME',
  124. datetime1: '@DATETIME',
  125. datetime2: '@DATETIME("yyyy-MM-dd A HH:mm:ss")',
  126. datetime3: '@DATETIME("yyyy-MM-dd a HH:mm:ss")',
  127. datetime4: '@DATETIME("yy-MM-dd HH:mm:ss")',
  128. datetime5: '@DATETIME("y-MM-dd HH:mm:ss")',
  129. datetime6: '@DATETIME("y-M-d H:m:s")',
  130. now: '@NOW',
  131. nowYear: '@NOW("year")',
  132. nowMonth: '@NOW("month")',
  133. nowDay: '@NOW("day")',
  134. nowHour: '@NOW("hour")',
  135. nowMinute: '@NOW("minute")',
  136. nowSecond: '@NOW("second")',
  137. nowWeek: '@NOW("week")',
  138. nowCustom: '@NOW("yyyy-MM-dd HH:mm:ss SS")'
  139. },
  140. image: {
  141. image1: '@IMAGE',
  142. image2: '@IMAGE("100x200", "#000")',
  143. image3: '@IMAGE("100x200", "#000", "hello")',
  144. image4: '@IMAGE("100x200", "#000", "#FFF", "hello")',
  145. image5: '@IMAGE("100x200", "#000", "#FFF", "png", "hello")',
  146. dataImage1: '@DATAIMAGE',
  147. dataImage2: '@DATAIMAGE("200x100")',
  148. dataImage3: '@DATAIMAGE("300x100", "Hello Mock.js!")'
  149. },
  150. color: {
  151. color: '@COLOR',
  152. render: function() {
  153. $('.header').css('background', this.color)
  154. }
  155. },
  156. text: {
  157. title1: '@TITLE',
  158. title2: '@TITLE(5)',
  159. title3: '@TITLE(3, 5)',
  160. word1: '@WORD',
  161. word2: '@WORD(5)',
  162. word3: '@WORD(3, 5)',
  163. sentence1: '@SENTENCE',
  164. sentence2: '@SENTENCE(5)',
  165. sentence3: '@SENTENCE(3, 5)',
  166. paragraph1: '@PARAGRAPH',
  167. paragraph2: '@PARAGRAPH(2)',
  168. paragraph3: '@PARAGRAPH(1, 3)'
  169. },
  170. name: {
  171. first: '@FIRST',
  172. last: '@LAST',
  173. name1: '@NAME',
  174. name2: '@NAME(true)'
  175. },
  176. web: {
  177. url: '@URL',
  178. domain: '@DOMAIN',
  179. email: '@EMAIL',
  180. ip: '@IP',
  181. tld: '@TLD',
  182. },
  183. address: {
  184. region: '@REGION',
  185. province: '@PROVINCE',
  186. city: '@CITY',
  187. county: '@COUNTY'
  188. },
  189. miscellaneous: {
  190. guid: '@GUID',
  191. id: '@ID',
  192. 'increment1|3': [
  193. '@INCREMENT'
  194. ],
  195. 'increment2|3': [
  196. '@INCREMENT(10)'
  197. ]
  198. },
  199. helpers: {
  200. capitalize1: '@CAPITALIZE()',
  201. capitalize2: '@CAPITALIZE("hello")',
  202. upper1: '@UPPER',
  203. upper2: '@UPPER("hello")',
  204. lower1: '@LOWER',
  205. lower2: '@LOWER("HELLO")',
  206. pick1: '@PICK',
  207. pick2: '@PICK("abc")',
  208. pick3: '@PICK(["a", "b", "c"])',
  209. shuffle1: '@SHUFFLE',
  210. shuffle2: '@SHUFFLE(["a", "b", "c"])'
  211. }
  212. }
  213. it('', function() {
  214. var data = Mock.mock(tpl)
  215. // this.test.title += JSON.stringify(data, null, 4)
  216. expect(data).to.be.a('object')
  217. })
  218. })
  219. })