index.test.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. const useInterceptInstall = require('../install');
  2. const { expect } = require('chai');
  3. function ensureAllTaskDone(taskList, done) {
  4. let tasks = {};
  5. taskList.forEach(v => (tasks[v] = false));
  6. let _interval = setInterval(function() {
  7. let alldone = true;
  8. for (let k in tasks) {
  9. alldone = alldone && tasks[k];
  10. }
  11. if (alldone) {
  12. clearInterval(_interval);
  13. done();
  14. }
  15. });
  16. return {
  17. done: function(key) {
  18. tasks[key] = true;
  19. }
  20. };
  21. }
  22. describe('@wepy/use-intercept', function() {
  23. let __storage = {
  24. mydata: { a: 1 }
  25. };
  26. let wx = {
  27. request: function(option) {
  28. setTimeout(() => {
  29. option.fail && option.fail(new Error('wx.request error'));
  30. option.complete && option.complete({ a: 1 });
  31. }, 1000);
  32. },
  33. getStorage: function(option) {
  34. setTimeout(() => {
  35. let res = __storage[option.key];
  36. option.success && option.success(res);
  37. option.complete && option.complete(res);
  38. });
  39. },
  40. setStorage: function(option) {
  41. setTimeout(() => {
  42. __storage[option.key] = option.data;
  43. });
  44. },
  45. setStorageSync: function(option) {
  46. __storage[option.key] = option.data;
  47. },
  48. getStorageSync: function(key) {
  49. let res = __storage[key];
  50. return res;
  51. },
  52. someNewAPI: function(option) {
  53. setTimeout(() => {
  54. option.success(option.num);
  55. });
  56. },
  57. showActionSheet: function(option) {
  58. setTimeout(() => {
  59. option.success && option.success(option);
  60. });
  61. }
  62. };
  63. before(function() {
  64. global.wx = wx;
  65. });
  66. it('test callback success', function(done) {
  67. let task = ensureAllTaskDone(['test-getStorage-config', 'test-getStorage-success', 'test-request-complete'], done);
  68. let wepy = {};
  69. useInterceptInstall(wepy);
  70. const timeNow = +new Date();
  71. const getStorage = wepy.intercept(wepy.wx.getStorage, {
  72. config(p) {
  73. p.t = timeNow;
  74. expect(p.key).to.equal('sid');
  75. task.done('test-getStorage-config');
  76. return p;
  77. },
  78. success(res) {
  79. res += ' world';
  80. return res;
  81. },
  82. complete(res) {
  83. res += ' complete';
  84. return res;
  85. }
  86. });
  87. expect(getStorage).is.a('function');
  88. wx.setStorageSync({
  89. key: 'sid',
  90. data: 'hello'
  91. });
  92. getStorage({
  93. key: 'sid',
  94. success(res) {
  95. expect(res).to.equal('hello world');
  96. task.done('test-getStorage-success');
  97. },
  98. fail() {
  99. throw new Error('never go here');
  100. },
  101. complete(res) {
  102. expect(res).to.equal('hello complete');
  103. task.done('test-request-complete');
  104. }
  105. });
  106. });
  107. it('test callback config promise', function(done) {
  108. let task = ensureAllTaskDone(['test-getStorage-config', 'test-getStorage-success', 'test-request-complete'], done);
  109. let wepy = {};
  110. useInterceptInstall(wepy);
  111. const timeNow = +new Date();
  112. const getStorage = wepy.intercept(wepy.wx.getStorage, {
  113. config(p) {
  114. p.t = timeNow;
  115. expect(p.key).to.equal('sid');
  116. return new Promise(resolve => {
  117. setTimeout(() => {
  118. task.done('test-getStorage-config');
  119. resolve(p);
  120. });
  121. });
  122. },
  123. success(res) {
  124. res += ' world';
  125. return res;
  126. },
  127. complete(res) {
  128. res += ' complete';
  129. return res;
  130. }
  131. });
  132. expect(getStorage).is.a('function');
  133. wx.setStorageSync({
  134. key: 'sid',
  135. data: 'hello'
  136. });
  137. getStorage({
  138. key: 'sid',
  139. success(res) {
  140. expect(res).to.equal('hello world');
  141. task.done('test-getStorage-success');
  142. },
  143. fail() {
  144. throw new Error('never go here');
  145. },
  146. complete(res) {
  147. expect(res).to.equal('hello complete');
  148. task.done('test-request-complete');
  149. }
  150. });
  151. });
  152. it('test callback config promise reject', function(done) {
  153. let task = ensureAllTaskDone(['test-getStorage-config', 'test-getStorage-fail'], done);
  154. let wepy = {};
  155. useInterceptInstall(wepy);
  156. const timeNow = +new Date();
  157. const getStorage = wepy.intercept(wepy.wx.getStorage, {
  158. config(p) {
  159. p.t = timeNow;
  160. expect(p.key).to.equal('sid');
  161. return new Promise((_, reject) => {
  162. setTimeout(() => {
  163. task.done('test-getStorage-config');
  164. reject(new Error('test'));
  165. });
  166. });
  167. },
  168. fail(e) {
  169. return new Error(e.message + ' from interceptor');
  170. },
  171. success(res) {
  172. res += ' world';
  173. return res;
  174. },
  175. complete(res) {
  176. res += ' complete';
  177. return res;
  178. }
  179. });
  180. expect(getStorage).is.a('function');
  181. wx.setStorageSync({
  182. key: 'sid',
  183. data: 'hello'
  184. });
  185. getStorage({
  186. key: 'sid',
  187. success() {
  188. throw new Error('never go here');
  189. },
  190. fail(e) {
  191. expect(e.message).to.equal('test from interceptor');
  192. task.done('test-getStorage-fail');
  193. },
  194. complete() {
  195. throw new Error('never call complete when interceptor config reject');
  196. }
  197. });
  198. });
  199. it('test callback failed', function(done) {
  200. let task = ensureAllTaskDone(['test-request-config', 'test-request-fail', 'test-request-complete'], done);
  201. let wepy = {};
  202. useInterceptInstall(wepy);
  203. const timeNow = +new Date();
  204. const request = wepy.intercept(wepy.wx.request, {
  205. config(params) {
  206. params.t = timeNow;
  207. task.done('test-request-config');
  208. expect(params.url).to.equal('www.baidu.com');
  209. return params;
  210. },
  211. fail(e) {
  212. e.intercept_fail = true;
  213. return e;
  214. },
  215. complete(res) {
  216. res.intercept_complete = true;
  217. return res;
  218. }
  219. });
  220. expect(request).is.a('function');
  221. request({
  222. url: 'www.baidu.com',
  223. success() {
  224. throw new Error('never go here');
  225. },
  226. fail(e) {
  227. expect(e.intercept_fail).to.equal(true);
  228. task.done('test-request-fail');
  229. },
  230. complete(res) {
  231. expect(res.a).to.equal(1);
  232. expect(res.intercept_complete).to.equal(true);
  233. task.done('test-request-complete');
  234. }
  235. });
  236. });
  237. after(function() {
  238. delete global.wx;
  239. });
  240. });