index.test.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. // 校验各种设置config ,入参是否正确
  2. import tcb from '../../src/index'
  3. import assert from 'assert'
  4. import config from '../config.local'
  5. import url from 'url'
  6. beforeEach(async () => {
  7. jest.resetModules()
  8. jest.resetAllMocks()
  9. })
  10. afterEach(async () => {
  11. jest.resetModules()
  12. jest.resetAllMocks()
  13. })
  14. // TODO 删除前先创建
  15. describe('校验config设置 请求入参', () => {
  16. const app = tcb.init(config)
  17. it('config retries', async () => {
  18. const tcb = require('../../src/index')
  19. const app = tcb.init({
  20. ...config,
  21. retries: 3
  22. })
  23. const res = await app.callFunction({
  24. name: 'test',
  25. data: {}
  26. })
  27. assert.ok(res.result === 'hello')
  28. })
  29. it('config forever', async () => {
  30. const tcb = require('../../src/index')
  31. const app = tcb.init({
  32. ...config,
  33. forever: true
  34. })
  35. const res = await app.callFunction({
  36. name: 'test',
  37. data: {}
  38. })
  39. assert.ok(res.result === 'hello')
  40. })
  41. it('request retryOptions', async () => {
  42. const tcb = require('../../src/index')
  43. const app = tcb.init({
  44. ...config
  45. })
  46. const res = await app.callFunction(
  47. {
  48. name: 'test',
  49. data: {}
  50. },
  51. {
  52. retryOptions: {
  53. retries: 3
  54. }
  55. }
  56. )
  57. assert.ok(res.result === 'hello')
  58. })
  59. it('微信openapi', async () => {
  60. try {
  61. let result = await app.callWxOpenApi({
  62. apiName: '/inner/svrkitclientcall',
  63. requestData: { name: 'jamespeng' }
  64. })
  65. } catch (e) {
  66. assert(e.code === 'INVALID_PARAM')
  67. }
  68. }, 30000)
  69. it('微信new openapi', async () => {
  70. try {
  71. let result = await app.callCompatibleWxOpenApi({
  72. apiName: '/AAA/BBB/sample',
  73. requestData: Buffer.from(JSON.stringify({ name: 'jamespeng' }))
  74. })
  75. } catch (e) {
  76. assert(e.code === 'INVALID_PARAM')
  77. }
  78. // assert(result.result, '微信openapi失败');
  79. }, 30000)
  80. it('校验config.isHttp => protocol', async () => {
  81. config.isHttp = true
  82. jest.mock('../../src/utils/request', () => {
  83. return {
  84. extraRequest: jest.fn().mockImplementation(opts => {
  85. return Promise.resolve({
  86. statusCode: 200,
  87. body: {
  88. data: { response_data: opts },
  89. requestId: 'testRequestId'
  90. }
  91. })
  92. })
  93. }
  94. })
  95. const tcb = require('../../src/index')
  96. let app = tcb.init(config)
  97. // mock一次http请求
  98. let mockReqRes = await app.callFunction({
  99. name: 'unexistFunction',
  100. data: { a: 1 }
  101. })
  102. let reqOpts = mockReqRes.result
  103. assert(reqOpts.url.indexOf('https') < 0)
  104. config.isHttp = false
  105. app = tcb.init(config)
  106. // mock一次https请求
  107. mockReqRes = await app.callFunction({
  108. name: 'unexistFunction',
  109. data: { a: 1 }
  110. })
  111. reqOpts = mockReqRes.result
  112. assert(reqOpts.url.indexOf('https') >= 0)
  113. })
  114. it('校验 parseContext 后 url', async () => {
  115. jest.mock('../../src/utils/request', () => {
  116. return {
  117. extraRequest: jest.fn().mockImplementation(opts => {
  118. return Promise.resolve({
  119. statusCode: 200,
  120. body: {
  121. data: { response_data: opts },
  122. requestId: 'testRequestId'
  123. }
  124. })
  125. })
  126. }
  127. })
  128. const mockContext = {
  129. memory_limit_in_mb: 256,
  130. time_limit_in_ms: 3000,
  131. request_id: '3169444b-25f4-11ea-81e5-525400235f2a',
  132. environ:
  133. 'WX_CLIENTIP=10.12.23.71;WX_CLIENTIPV6=::ffff:10.12.23.71;WX_APPID=wx5ceb4e4809aa1d28;WX_OPENID=oaEk445grItIBpFcJ3eRBCb6yx8g;WX_API_TOKEN=eyJWZXJzaW9uIjoxLCJLZXlWZXJzaW9uIjo4MSwiZXZlbnRJZCI6IkhFeXJYb0hrQjVDLW1OWk1JWkx3N29hNHNoZU9uMEtfNlhuM1FEb2Y0NFV6LVRJRWtyNkZSbUZ3SDhQLWNiS1dETWtyTTZ2Qm1MNXRodjR4SGgycDhXLU1sUzY1Q19uc2FiWmVaTUFpN3c4SktRIiwidGlja2V0IjoiQ0VVU2dBUSsxUzlqWnRHa0ZGenQwTmp4VENCWkM3dHp5M3Vxa252b1pqanFleUY0WEJ1WG1VMElQUGFQZElDYUlkOWxYZGZ5YUxSN3MxR3F3a3NKSEdLb3c2K1FRVGF4cWhZYlJYT3doRWVWYXEya3VGVUxmQWt4TlpKUlFvd2lBNUJsbm8zRDlaOFNZandtRUFtRG1ITitBN3lFRG40Y2NhcHh1OFdjV3N6Tjc3Rkt0WmE2czhadmNTNW9zTmlXcXU5dWRDeEszb05jM3ZuNFdtS2VOcVRqN1BWcWZJUWhMWmhKNmFxbDIvSGdONXhCRkdFaUI1RmtYVEdJUnc0TmxzYTlMUmZ5enp1dDZSazRrVTBUZ3RrOFV3S1dyS1ZKbktoSFg3WEJTSXN1SlF1VDdUL0tzL0JuS1BsM3FNZVdmeGlrKzY1K3VpSTZZb1VyMm9NUlExek11NzVKWVNDaGFGRmxYZWZFeDVBelY1TWF4QUczVHRSL2JhNGhocDZUUjE5ZlNlcVRGTUJjNUh4NXBlUzVWbkVGYWRDdTRZZS9rT0RxZW5xZCtxbnlvYjZNbXFLa0F3VkdXVzRYZ2VVNkZXSnM5Mzl5OFpGRTU1dWpVT0lNWmVDZ1VvNi9Bb201VHFxSXJvK25rK2hCUGh0L1lJVTZMU25INkVVWWtZVXhHZzJKOTBaTDFKZThFN0ZYZzFSQjFyenJGS2NsZEJndVVLWDFxVlBtWExRNndhdWpOcHpneDBNaGZvVENrenhVaWJEdWRqMlAyeG9tNlQ5L3VaM0FON1ZNeEJwckVKTzVQMDZndDV0SElCOXRxK1NPM01pVjluQk03UCtRendhVEJ6eUx6OThGUzBwSVhTdHYyYU9YMzhiZE1FVkpkQkkrUTJ1NW0xWmNENW9kODQ3UnlBPT0ifQ==;WX_CONTEXT_KEYS=WX_CLIENTIP,WX_CLIENTIPV6,WX_APPID,WX_OPENID,WX_API_TOKEN;TCB_ENV=luke-87pns;TCB_SEQID=1577153917182_0.13161529658114857_33555268;TRIGGER_SRC=tcb;TCB_SESSIONTOKEN=pNNA4UPZHja3ngOjkBJbPFCyNvL9twqf0931632f99099b88fdc6ae3e119dc84dsO99eZ7w6rzsbeh4Zf7bDQDns1glEZ761vFBDajV1ijUp-Sj-l59rfLi_s1TdYiA82HjIJzbVKnKEHzuFLJlonOIYd_NFnkQJw4MB0L6vYLcmDYYMzEhrByAddagrSdoxux6vwHfJ4B0tzzajmcXqFKkowDZJn5ZZBX1I-Sta1nfoX73qTCqlUWPAAhkhECa81LSvZrFTfsvZyLOOAvevK_kP5qy2zeYKgQtb9IvHI1xmOSj0AaTIiuqOce5i4_kLu5_Z9Gqqxc1PS2oimkhWRqL79E-sW-fF3HpuGD01W832B2wn9W3vpaKi50lyN2gAyKW3Wf0ASA_vPVyZziR20fkmfmThrrBnLgGYd-FPAk;TCB_SOURCE=wx_devtools;TCB_CONTEXT_KEYS=TCB_ENV,TCB_SEQID,TRIGGER_SRC,TCB_SESSIONTOKEN,TCB_SOURCE;TENCENTCLOUD_SECRETID=AKIDDtm4yzucNcl_lE7IixiQO5aTdd4eBnut0eOk6Br82dnMsx5hg2ZEzBWtxUcUWcjO;TENCENTCLOUD_SECRETKEY=cEh6rsAFJTIeue3REKZQUHdQTTVJKhZmOb1EPLLPhSA=;TENCENTCLOUD_SESSIONTOKEN=DnAZAXuXDmPY87R0UWZMQ4JTIr6SeqpU1eb1faab03564a897dd3fc31dcc3d348GxhExs-XtxXU-g6pm7sXBpGwkJzRcEyYQHnnB6AONAbRfbphlIm-BfGhdXY2RQeEj7UiOWKTw1_VliMk8HIhgNYRZx0Ue6KXiNUneMvX5SgOOOToOCM2-YJTh6oYj1NhoLaefxPRf8TQ72yLWTagRh0x9IaTtpp6jrJFR7lBA26JLgATRnGJRw-iO2HNMCDSSVVT_VnhO46JGGUdEjfBCzs-6uU0jTSlE_Q7EKOt9_4N3a6JfzCxsJQV8IebfZXcTcVqjefiIHZyNGv71-GUbpfHhhfy_EhPlRJsDnvCByiqsM3celEvf86LtIBI-m2Tbae-K069lu5wC3_PFxC_5hjvIiTpfiQW2wEKwlSuklQ;SCF_NAMESPACE=luke-87pns',
  134. function_version: '$LATEST',
  135. function_name: 'login',
  136. namespace: 'luke-87pns'
  137. }
  138. const tcb = require('../../src/index')
  139. tcb.parseContext(mockContext)
  140. const app = tcb.init(config)
  141. // mock一次http请求
  142. let mockReqRes = await app.callFunction({
  143. name: 'unexistFunction',
  144. data: { a: 1 }
  145. })
  146. let reqOpts = mockReqRes.result
  147. console.log('reqOpts.url:', reqOpts.url)
  148. // assert(reqOpts.url.indexOf('https') < 0)
  149. const myURL = url.parse(reqOpts.url, true)
  150. assert.ok(myURL.query.scfRequestId === '3169444b-25f4-11ea-81e5-525400235f2a')
  151. })
  152. it('校验传入url 带?', async () => {
  153. jest.mock('../../src/utils/request', () => {
  154. return {
  155. extraRequest: jest.fn().mockImplementation(opts => {
  156. return Promise.resolve({
  157. statusCode: 200,
  158. body: {
  159. data: { response_data: opts },
  160. requestId: 'testRequestId'
  161. }
  162. })
  163. })
  164. }
  165. })
  166. const tcb = require('../../src/index')
  167. let app = tcb.init({
  168. ...config,
  169. serviceUrl: 'http://testUrl.test.com?'
  170. })
  171. // mock一次http请求
  172. let mockReqRes = await app.callFunction({
  173. name: 'unexistFunction',
  174. data: { a: 1 }
  175. })
  176. let reqOpts = mockReqRes.result
  177. // console.log(reqOpts.url)
  178. const matchNum = reqOpts.url.match(/\?/g)
  179. // console.log(matchNum)
  180. assert(matchNum.length === 1)
  181. })
  182. it('校验config.version => x-sdk-version config.serviceUrl => url', async () => {
  183. config.version = 'test-version'
  184. config.serviceUrl = 'http://testUrl.test.com'
  185. jest.mock('../../src/utils/request', () => {
  186. return {
  187. extraRequest: jest.fn().mockImplementation(opts => {
  188. return Promise.resolve({
  189. statusCode: 200,
  190. body: {
  191. data: { response_data: opts },
  192. requestId: 'testRequestId'
  193. }
  194. })
  195. })
  196. }
  197. })
  198. const tcb = require('../../src/index')
  199. let app = tcb.init(config)
  200. // mock一次http请求
  201. let mockReqRes = await app.callFunction({
  202. name: 'unexistFunction',
  203. data: { a: 1 }
  204. })
  205. let reqOpts = mockReqRes.result
  206. assert(reqOpts.headers['X-SDK-Version'] === config.version)
  207. assert(reqOpts.url.indexOf('http://testUrl.test.com') === 0)
  208. })
  209. it('校验config.serviceUrl => url', async () => {
  210. config.serviceUrl = 'http://testUrl.com'
  211. jest.mock('../../src/utils/request', () => {
  212. return {
  213. extraRequest: jest.fn().mockImplementation(opts => {
  214. return Promise.resolve({
  215. statusCode: 200,
  216. body: {
  217. data: { response_data: opts },
  218. requestId: 'testRequestId'
  219. }
  220. })
  221. })
  222. }
  223. })
  224. const tcb = require('../../src/index')
  225. let app = tcb.init(config)
  226. // mock一次http请求
  227. let mockReqRes = await app.callFunction({
  228. name: 'unexistFunction',
  229. data: { a: 1 }
  230. })
  231. let reqOpts = mockReqRes.result
  232. assert(reqOpts.url.indexOf('testUrl') >= 0)
  233. })
  234. // mock callWxOpenApi 回包为string
  235. it('微信openapi mock回包为string', async () => {
  236. jest.resetModules()
  237. jest.mock('request', () => {
  238. return {
  239. extraRequest: jest.fn().mockImplementation(params => {
  240. return Promise.resolve({
  241. statusCode: 200,
  242. body: {
  243. data: { response_data: 'test' },
  244. requestId: 'testRequestId'
  245. }
  246. })
  247. })
  248. }
  249. })
  250. const tcb1 = require('../../src/index')
  251. const app1 = tcb1.init(config)
  252. try {
  253. let result = await app1.callWxOpenApi({
  254. apiName: '/inner/svrkitclientcall',
  255. requestData: { name: 'jamespeng' }
  256. })
  257. // assert(typeof result.result === 'string')
  258. } catch (err) {
  259. // assert(err.code === 'STORAGE_REQUEST_FAIL')
  260. console.log(err)
  261. }
  262. })
  263. })