test.mock.spec.dpd.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  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. it('Relative Path Fallback in Corner Case', function() {
  91. const STRING = 'https://test.org/@a/build/test.html'
  92. var data = Mock.mock({
  93. a: STRING
  94. })
  95. expect(data.a).to.equal(STRING)
  96. })
  97. })
  98. describe('Complex', function() {
  99. var tpl = {
  100. basics: {
  101. boolean1: '@BOOLEAN',
  102. boolean2: '@BOOLEAN(1, 9, true)',
  103. natural1: '@NATURAL',
  104. natural2: '@NATURAL(10000)',
  105. natural3: '@NATURAL(60, 100)',
  106. integer1: '@INTEGER',
  107. integer2: '@INTEGER(10000)',
  108. integer3: '@INTEGER(60, 100)',
  109. float1: '@FLOAT',
  110. float2: '@FLOAT(0)',
  111. float3: '@FLOAT(60, 100)',
  112. float4: '@FLOAT(60, 100, 3)',
  113. float5: '@FLOAT(60, 100, 3, 5)',
  114. character1: '@CHARACTER',
  115. character2: '@CHARACTER("lower")',
  116. character3: '@CHARACTER("upper")',
  117. character4: '@CHARACTER("number")',
  118. character5: '@CHARACTER("symbol")',
  119. character6: '@CHARACTER("aeiou")',
  120. string1: '@STRING',
  121. string2: '@STRING(5)',
  122. string3: '@STRING("lower",5)',
  123. string4: '@STRING(7, 10)',
  124. string5: '@STRING("aeiou", 1, 3)',
  125. range1: '@RANGE(10)',
  126. range2: '@RANGE(3, 7)',
  127. range3: '@RANGE(1, 10, 2)',
  128. range4: '@RANGE(1, 10, 3)',
  129. date: '@DATE',
  130. time: '@TIME',
  131. datetime1: '@DATETIME',
  132. datetime2: '@DATETIME("yyyy-MM-dd A HH:mm:ss")',
  133. datetime3: '@DATETIME("yyyy-MM-dd a HH:mm:ss")',
  134. datetime4: '@DATETIME("yy-MM-dd HH:mm:ss")',
  135. datetime5: '@DATETIME("y-MM-dd HH:mm:ss")',
  136. datetime6: '@DATETIME("y-M-d H:m:s")',
  137. now: '@NOW',
  138. nowYear: '@NOW("year")',
  139. nowMonth: '@NOW("month")',
  140. nowDay: '@NOW("day")',
  141. nowHour: '@NOW("hour")',
  142. nowMinute: '@NOW("minute")',
  143. nowSecond: '@NOW("second")',
  144. nowWeek: '@NOW("week")',
  145. nowCustom: '@NOW("yyyy-MM-dd HH:mm:ss SS")'
  146. },
  147. image: {
  148. image1: '@IMAGE',
  149. image2: '@IMAGE("100x200", "#000")',
  150. image3: '@IMAGE("100x200", "#000", "hello")',
  151. image4: '@IMAGE("100x200", "#000", "#FFF", "hello")',
  152. image5: '@IMAGE("100x200", "#000", "#FFF", "png", "hello")',
  153. dataImage1: '@DATAIMAGE',
  154. dataImage2: '@DATAIMAGE("200x100")',
  155. dataImage3: '@DATAIMAGE("300x100", "Hello Mock.js!")'
  156. },
  157. color: {
  158. color: '@COLOR',
  159. render: function() {
  160. $('.header').css('background', this.color)
  161. }
  162. },
  163. text: {
  164. title1: '@TITLE',
  165. title2: '@TITLE(5)',
  166. title3: '@TITLE(3, 5)',
  167. word1: '@WORD',
  168. word2: '@WORD(5)',
  169. word3: '@WORD(3, 5)',
  170. sentence1: '@SENTENCE',
  171. sentence2: '@SENTENCE(5)',
  172. sentence3: '@SENTENCE(3, 5)',
  173. paragraph1: '@PARAGRAPH',
  174. paragraph2: '@PARAGRAPH(2)',
  175. paragraph3: '@PARAGRAPH(1, 3)'
  176. },
  177. name: {
  178. first: '@FIRST',
  179. last: '@LAST',
  180. name1: '@NAME',
  181. name2: '@NAME(true)'
  182. },
  183. web: {
  184. url: '@URL',
  185. domain: '@DOMAIN',
  186. email: '@EMAIL',
  187. ip: '@IP',
  188. tld: '@TLD',
  189. },
  190. address: {
  191. region: '@REGION',
  192. province: '@PROVINCE',
  193. city: '@CITY',
  194. county: '@COUNTY'
  195. },
  196. miscellaneous: {
  197. guid: '@GUID',
  198. id: '@ID',
  199. 'increment1|3': [
  200. '@INCREMENT'
  201. ],
  202. 'increment2|3': [
  203. '@INCREMENT(10)'
  204. ]
  205. },
  206. helpers: {
  207. capitalize1: '@CAPITALIZE()',
  208. capitalize2: '@CAPITALIZE("hello")',
  209. upper1: '@UPPER',
  210. upper2: '@UPPER("hello")',
  211. lower1: '@LOWER',
  212. lower2: '@LOWER("HELLO")',
  213. pick1: '@PICK',
  214. pick2: '@PICK("abc")',
  215. pick3: '@PICK(["a", "b", "c"])',
  216. shuffle1: '@SHUFFLE',
  217. shuffle2: '@SHUFFLE(["a", "b", "c"])'
  218. }
  219. }
  220. it('', function() {
  221. var data = Mock.mock(tpl)
  222. // this.test.title += JSON.stringify(data, null, 4)
  223. expect(data).to.be.a('object')
  224. })
  225. })
  226. })