canayRelease.test.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import config from '../config.local'
  2. import Tcb from '../../src/index'
  3. // 云函数调用云函数,需要在SDK透传routekey等灰度发布参数
  4. // - 数据流调用云函数时注入 TCB_ROUTE_KEY 变量
  5. // - SDK 读取云函数中的 TCB_ROUTE_KEY 变量
  6. // - SDK 调用数据流服务时带上 routeKey 参数,没有时不传
  7. // - 数据流服务判断有 routeKey 时使用该 routeKey
  8. jest.mock('request')
  9. describe('函数支持灰度发布功能', () => {
  10. const app = Tcb.init(config)
  11. it('无 TCB_ROUTE_KEY 等灰度发布环境变量时调用云函数不透传 X-Tcb-Route-Key header参数', async function() {
  12. process.env.TCB_ROUTE_KEY = ''
  13. process.env.TCB_CONTEXT_KEYS = 'TCB_ROUTE_KEY'
  14. const mockedRequest = require('request')
  15. // mockedRequest.mockClear()
  16. app.callFunction({
  17. name: 'test',
  18. data: { a: 1 }
  19. })
  20. return new Promise(resolve => {
  21. setImmediate(() => {
  22. expect(mockedRequest).toBeCalled()
  23. expect(mockedRequest.mock.calls[0][0].headers).not.toHaveProperty('X-Tcb-Route-Key')
  24. expect(mockedRequest.mock.calls[0][0].headers['X-Tcb-Route-Key']).toBe(undefined)
  25. resolve()
  26. })
  27. })
  28. })
  29. it('存在 TCB_ROUTE_KEY 等灰度发布相关变量时透传 X-Tcb-Route-Key header参数', async function() {
  30. const randomRouteKey = String(Math.floor(Math.random() * 100) + 1)
  31. process.env.TCB_ROUTE_KEY = randomRouteKey
  32. process.env.TCB_CONTEXT_KEYS = 'TCB_ROUTE_KEY'
  33. const mockedRequest = require('request')
  34. mockedRequest.mockClear()
  35. app.callFunction({
  36. name: 'test',
  37. data: { a: 1 }
  38. })
  39. return new Promise(resolve => {
  40. setImmediate(() => {
  41. expect(mockedRequest).toBeCalled()
  42. expect(mockedRequest.mock.calls[0][0].headers['X-Tcb-Route-Key']).toBe(
  43. randomRouteKey
  44. )
  45. resolve()
  46. })
  47. })
  48. })
  49. })