setupJestEnv.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. expect.extend({
  2. toHaveBeenWarned(received: string) {
  3. asserted.add(received)
  4. const passed = warn.mock.calls.some(args => args[0].indexOf(received) > -1)
  5. if (passed) {
  6. return {
  7. pass: true,
  8. message: () => `expected "${received}" not to have been warned.`
  9. }
  10. } else {
  11. const msgs = warn.mock.calls.map(args => args[0]).join('\n - ')
  12. return {
  13. pass: false,
  14. message: () =>
  15. `expected "${received}" to have been warned.\n\nActual messages:\n\n - ${msgs}`
  16. }
  17. }
  18. },
  19. toHaveBeenWarnedLast(received: string) {
  20. asserted.add(received)
  21. const passed =
  22. warn.mock.calls[warn.mock.calls.length - 1][0].indexOf(received) > -1
  23. if (passed) {
  24. return {
  25. pass: true,
  26. message: () => `expected "${received}" not to have been warned last.`
  27. }
  28. } else {
  29. const msgs = warn.mock.calls.map(args => args[0]).join('\n - ')
  30. return {
  31. pass: false,
  32. message: () =>
  33. `expected "${received}" to have been warned last.\n\nActual messages:\n\n - ${msgs}`
  34. }
  35. }
  36. },
  37. toHaveBeenWarnedTimes(received: string, n: number) {
  38. asserted.add(received)
  39. let found = 0
  40. warn.mock.calls.forEach(args => {
  41. if (args[0].indexOf(received) > -1) {
  42. found++
  43. }
  44. })
  45. if (found === n) {
  46. return {
  47. pass: true,
  48. message: () => `expected "${received}" to have been warned ${n} times.`
  49. }
  50. } else {
  51. return {
  52. pass: false,
  53. message: () =>
  54. `expected "${received}" to have been warned ${n} times but got ${found}.`
  55. }
  56. }
  57. }
  58. })
  59. let warn: jest.SpyInstance
  60. const asserted: Set<string> = new Set()
  61. beforeEach(() => {
  62. asserted.clear()
  63. warn = jest.spyOn(console, 'warn')
  64. warn.mockImplementation(() => {})
  65. })
  66. afterEach(() => {
  67. const assertedArray = Array.from(asserted)
  68. const nonAssertedWarnings = warn.mock.calls
  69. .map(args => args[0])
  70. .filter(received => {
  71. return !assertedArray.some(assertedMsg => {
  72. return received.indexOf(assertedMsg) > -1
  73. })
  74. })
  75. warn.mockRestore()
  76. if (nonAssertedWarnings.length) {
  77. throw new Error(
  78. `test case threw unexpected warnings:\n - ${nonAssertedWarnings.join(
  79. '\n - '
  80. )}`
  81. )
  82. }
  83. })