async&await.test.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. const TcbRouter = require('../src/index');
  2. describe('req test', () => {
  3. const app = new TcbRouter({
  4. event: { $url: "router", data: { name: 'tcb', sex: 'male' } }
  5. });
  6. test("req", () => {
  7. expect(app._req).toMatchObject({
  8. event: {
  9. $url: "router",
  10. data: {
  11. name: 'tcb',
  12. sex: 'male'
  13. }
  14. }
  15. });
  16. expect(app._req).toHaveProperty("url", "router");
  17. });
  18. });
  19. describe('route test', () => {
  20. test("router string", async () => {
  21. const app = new TcbRouter({
  22. event: { $url: "router", data: { name: 'tcb', sex: 'male' } }
  23. });
  24. app.use(async (ctx, next) => {
  25. ctx.data = { company: 'Tencent' };
  26. await next();
  27. });
  28. app.router('router', async (ctx, next) => {
  29. ctx.data.name = 'tcb';
  30. ctx.body = {
  31. code: 0,
  32. message: 'succcess'
  33. };
  34. await next();
  35. });
  36. let result = await app.serve();
  37. expect(result).toEqual({
  38. code: 0,
  39. message: 'succcess'
  40. });
  41. expect(app._req).toMatchObject({
  42. event: {
  43. $url: "router",
  44. data: {
  45. name: 'tcb',
  46. sex: 'male'
  47. }
  48. }
  49. });
  50. expect(app.data).toEqual({ name: 'tcb', company: 'Tencent' });
  51. });
  52. test("router array", async () => {
  53. const app = new TcbRouter({
  54. event: { $url: "router2", data: { name: 'tcb', sex: 'male' } }
  55. });
  56. app.use(async (ctx, next) => {
  57. ctx.data = { company: 'Tencent' };
  58. await next();
  59. });
  60. app.router(['router', "router2"], async (ctx, next) => {
  61. ctx.data.name = 'tcb';
  62. ctx.body = {
  63. code: 0,
  64. message: 'succcess'
  65. };
  66. await next();
  67. });
  68. let result = await app.serve();
  69. expect(result).toEqual({
  70. code: 0,
  71. message: 'succcess'
  72. });
  73. expect(app._req).toMatchObject({
  74. event: {
  75. $url: "router2",
  76. data: {
  77. name: 'tcb',
  78. sex: 'male'
  79. }
  80. }
  81. });
  82. expect(app.data).toEqual({ name: 'tcb', company: 'Tencent' });
  83. });
  84. test("use", async () => {
  85. const app = new TcbRouter({
  86. event: { $url: "router2", data: { name: 'tcb', sex: 'male' } }
  87. });
  88. app.use(async (ctx) => {
  89. ctx.data = { company: 'Tencent' };
  90. ctx.body = {
  91. code: 0,
  92. message: 'succcess'
  93. };
  94. });
  95. let result = await app.serve();
  96. expect(result).toEqual({
  97. code: 0,
  98. message: 'succcess'
  99. });
  100. expect(app._req).toMatchObject({
  101. event: {
  102. $url: "router2",
  103. data: {
  104. name: 'tcb',
  105. sex: 'male'
  106. }
  107. }
  108. });
  109. expect(app.data).toEqual({ company: 'Tencent' });
  110. });
  111. test('use routes', async () => {
  112. const app = new TcbRouter({
  113. event: { $url: 'router', data: { name: 'tcb', sex: 'male' } }
  114. });
  115. app.use('router', async (ctx) => {
  116. ctx.data = { name: 'tcb', company: 'Tencent' };
  117. ctx.body = {
  118. code: 0,
  119. message: 'succcess'
  120. };
  121. });
  122. let result = await app.serve();
  123. expect(result).toEqual({
  124. code: 0,
  125. message: 'succcess'
  126. });
  127. expect(app._req).toMatchObject({
  128. event: {
  129. $url: "router",
  130. data: {
  131. name: 'tcb',
  132. sex: 'male'
  133. }
  134. }
  135. });
  136. expect(app.data).toEqual({ name: 'tcb', company: 'Tencent' });
  137. });
  138. test('not match routes', async () => {
  139. const app = new TcbRouter({
  140. event: { $url: 'router1', data: { name: 'tcb', sex: 'male' } }
  141. });
  142. app.use('router', async (ctx) => {
  143. ctx.data = { name: 'tcb', company: 'Tencent' };
  144. ctx.body = {
  145. code: 0,
  146. message: 'succcess'
  147. };
  148. });
  149. let result = await app.serve();
  150. expect(result).toEqual(undefined);
  151. expect(app._req).toMatchObject({
  152. event: {
  153. $url: "router1",
  154. data: {
  155. name: 'tcb',
  156. sex: 'male'
  157. }
  158. }
  159. });
  160. });
  161. });
  162. describe('exceptions', () => {
  163. test("use requires functions", async () => {
  164. const app = new TcbRouter({
  165. event: { $url: "router2", data: { name: 'tcb', sex: 'male' } }
  166. });
  167. console.warn = jest.fn();
  168. app.use(null);
  169. await app.serve();
  170. expect(console.warn.mock.calls[0][0]).toEqual('Handler should be a function. The middleware is not installed correctly.');
  171. });
  172. test("route requires functions", async () => {
  173. const app = new TcbRouter({
  174. event: { $url: "router2", data: { name: 'tcb', sex: 'male' } }
  175. });
  176. console.warn = jest.fn();
  177. app.router('router', null);
  178. await app.serve();
  179. expect(console.warn.mock.calls[0][0]).toEqual('Handler should be a function. The middleware is not installed correctly.');
  180. });
  181. });