storagemanage.test.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. // 定义类型默认值映射,与页面保持一致
  2. const valueTypeDefaultMap = new Map([
  3. ['String', 'hello'],
  4. ['Number', '1'],
  5. ['Boolean', 'true'],
  6. ['Object', '{"name": "张三","age": 12}'],
  7. ['Array', '[1, "hello", true, { "key": "value" }]']
  8. ])
  9. const platformInfo = process.env.uniTestPlatformInfo.toLocaleLowerCase()
  10. describe('Storage管理器页面-多类型新增', () => {
  11. let page
  12. beforeAll(async () => {
  13. page = await program.navigateTo('/pages/API/storage/storagemanage')
  14. // 开启测试模式,跳过确认弹窗
  15. await page.callMethod('setTestMode', true)
  16. await page.waitFor(500)
  17. const list = await page.callMethod('getStorageList')
  18. // 点击清空按钮
  19. if (list.length) {
  20. const clearBtn = await page.$('.btn-clear')
  21. await clearBtn.tap()
  22. await page.waitFor(300)
  23. }
  24. })
  25. afterAll(async () => {
  26. // 关闭测试模式
  27. await page.callMethod('setTestMode', false)
  28. })
  29. it('1. 新增String类型', async () => {
  30. // 点击新建按钮
  31. const createBtn = await page.$('.btn-create')
  32. await createBtn.tap()
  33. await page.waitFor(300)
  34. // 获取弹窗元素
  35. const mask = await page.$('.dialog-mask')
  36. const keyInput = await mask.$('.edit-input')
  37. const valueTextarea = await mask.$('.edit-textarea')
  38. const saveBtn = await mask.$('.btn-save')
  39. // 输入内容
  40. await keyInput.input('test_string')
  41. await valueTextarea.input('hello world')
  42. await saveBtn.tap()
  43. await page.waitFor(300)
  44. // 验证新增成功
  45. const list = await page.callMethod('getStorageList')
  46. expect(list.length).toBe(1)
  47. if (!platformInfo.startsWith('mp')) {
  48. expect(list[0].key).toBe('test_string')
  49. expect(list[0].value).toBe('hello world')
  50. }
  51. })
  52. it('2. 编辑String类型', async () => {
  53. // 点击编辑按钮
  54. const editBtn = await page.$('.btn-edit')
  55. await editBtn.tap()
  56. await page.waitFor(300)
  57. // 获取弹窗元素
  58. const mask = await page.$('.dialog-mask')
  59. const keyInput = await mask.$('.edit-input')
  60. const valueTextarea = await mask.$('.edit-textarea')
  61. const saveBtn = await mask.$('.btn-save')
  62. // 修改内容
  63. await keyInput.input('test_string_edited')
  64. await valueTextarea.input('hello world edited')
  65. await saveBtn.tap()
  66. await page.waitFor(300)
  67. // 验证修改成功
  68. const list = await page.callMethod('getStorageList')
  69. // 微信小程序端,基础库3.5.8以上版本,获取 value是[object HTMLElement] 暂时跳过
  70. if (!platformInfo.startsWith('mp')) {
  71. expect(list[0].key).toBe('test_string_edited')
  72. expect(list[0].value).toBe('hello world edited')
  73. }
  74. })
  75. it('3. 删除String类型', async () => {
  76. // 获取list-view的所有项,并选择第一个
  77. const listView = await page.$('.list-view')
  78. const listItems = await listView.$$('list-item')
  79. await listItems[0].tap()
  80. await page.waitFor(300)
  81. // 点击删除按钮
  82. const deleteBtn = await page.$('.btn-delete')
  83. await deleteBtn.tap()
  84. await page.waitFor(300)
  85. // 验证删除成功
  86. const list = await page.callMethod('getStorageList')
  87. expect(list.length).toBe(0)
  88. })
  89. it('4. 测试切换类型自动填充默认值', async () => {
  90. // 点击新建按钮
  91. const createBtn = await page.$('.btn-create')
  92. await createBtn.tap()
  93. await page.waitFor(300)
  94. // 获取弹窗元素
  95. const mask = await page.$('.dialog-mask')
  96. const typeItems = await mask.$$('.edit-type-radio')
  97. // 测试每种类型
  98. for (let i = 0; i < typeItems.length; i++) {
  99. await typeItems[i].tap()
  100. await page.waitFor(200)
  101. // 验证默认值是否正确
  102. const editValue = await page.data('editValue')
  103. const editValueType = await page.data('editValueType')
  104. if (platformInfo.startsWith('web') && editValueType._value != 'String') {
  105. // 获取 ref 的 value 属性
  106. expect(editValue._value).toBe(valueTypeDefaultMap.get(editValueType._value))
  107. }
  108. }
  109. // 关闭弹窗
  110. const cancelBtn = await mask.$('.btn-cancel')
  111. await cancelBtn.tap()
  112. await page.waitFor(300)
  113. })
  114. it('5. 新增所有类型', async () => {
  115. const types = ['String', 'Number', 'Boolean', 'Object', 'Array']
  116. for (const type of types) {
  117. // 点击新建按钮
  118. const createBtn = await page.$('.btn-create')
  119. await createBtn.tap()
  120. await page.waitFor(300)
  121. // 获取弹窗元素
  122. const mask = await page.$('.dialog-mask')
  123. const keyInput = await mask.$('.edit-input')
  124. const valueTextarea = await mask.$('.edit-textarea')
  125. const saveBtn = await mask.$('.btn-save')
  126. const typeRadios = await mask.$$('.edit-type-radio')
  127. // 选择类型
  128. const typeIndex = types.indexOf(type)
  129. await typeRadios[typeIndex].tap()
  130. await page.waitFor(100)
  131. // 输入内容
  132. await keyInput.input(`test_${type.toLowerCase()}`)
  133. await valueTextarea.input(valueTypeDefaultMap.get(type))
  134. await saveBtn.tap()
  135. await page.waitFor(300)
  136. }
  137. // 验证所有类型都添加成功
  138. const list = await page.callMethod('getStorageList')
  139. if (!platformInfo.startsWith('mp')) {
  140. expect(list.length).toBe(types.length)
  141. }
  142. })
  143. it('6. 清空所有存储项', async () => {
  144. // 点击清空按钮
  145. const clearBtn = await page.$('.btn-clear')
  146. await clearBtn.tap()
  147. await page.waitFor(300)
  148. // 验证清空成功
  149. const list = await page.callMethod('getStorageList')
  150. expect(list.length).toBe(0)
  151. })
  152. })