1
1
import { NoopTransport } from '@sentry/core' ;
2
2
3
- import { FetchTransport , setupBrowserTransport , XHRTransport } from '../../../src/transports' ;
3
+ import {
4
+ FetchTransport ,
5
+ makeNewFetchTransport ,
6
+ makeNewXHRTransport ,
7
+ setupBrowserTransport ,
8
+ XHRTransport ,
9
+ } from '../../../src/transports' ;
4
10
import { SimpleTransport } from '../mocks/simpletransport' ;
5
11
6
12
const DSN = 'https://username@domain/123' ;
7
13
8
14
let fetchSupported = true ;
9
- let getNativeFetchImplCalled = false ;
10
15
11
16
jest . mock ( '@sentry/utils' , ( ) => {
12
17
const original = jest . requireActual ( '@sentry/utils' ) ;
@@ -23,23 +28,32 @@ jest.mock('@sentry/utils', () => {
23
28
} ;
24
29
} ) ;
25
30
26
- jest . mock ( '@sentry/browser/ src/transports/utils ' , ( ) => {
27
- const original = jest . requireActual ( '@sentry/browser/ src/transports/utils ' ) ;
31
+ jest . mock ( '../../../ src/transports/new-fetch ' , ( ) => {
32
+ const original = jest . requireActual ( '../../../ src/transports/new-fetch ' ) ;
28
33
return {
29
34
...original ,
30
- getNativeFetchImplementation ( ) {
31
- getNativeFetchImplCalled = true ;
32
- return {
33
- fetch : ( ) => { } ,
34
- } ;
35
- } ,
35
+ makeNewFetchTransport : jest . fn ( ( ) => ( {
36
+ send : ( ) => Promise . resolve ( { status : 'success' } ) ,
37
+ flush : ( ) => Promise . resolve ( true ) ,
38
+ } ) ) ,
39
+ } ;
40
+ } ) ;
41
+
42
+ jest . mock ( '../../../src/transports/new-xhr' , ( ) => {
43
+ const original = jest . requireActual ( '../../../src/transports/new-xhr' ) ;
44
+ return {
45
+ ...original ,
46
+ makeNewXHRTransport : jest . fn ( ( ) => ( {
47
+ send : ( ) => Promise . resolve ( { status : 'success' } ) ,
48
+ flush : ( ) => Promise . resolve ( true ) ,
49
+ } ) ) ,
36
50
} ;
37
51
} ) ;
38
52
39
53
describe ( 'setupBrowserTransport' , ( ) => {
40
- beforeEach ( ( ) => {
41
- getNativeFetchImplCalled = false ;
42
- } ) ;
54
+ afterEach ( ( ) => jest . clearAllMocks ( ) ) ;
55
+
56
+ afterAll ( ( ) => jest . resetAllMocks ( ) ) ;
43
57
44
58
it ( 'returns NoopTransport if no dsn is passed' , ( ) => {
45
59
const { transport, newTransport } = setupBrowserTransport ( { } ) ;
@@ -65,10 +79,8 @@ describe('setupBrowserTransport', () => {
65
79
expect ( transport ) . toBeDefined ( ) ;
66
80
expect ( transport ) . toBeInstanceOf ( FetchTransport ) ;
67
81
expect ( newTransport ) . toBeDefined ( ) ;
68
- // This is a weird way of testing that `newTransport` is using fetch but it works.
69
- // Given that the new transports are functions, we cannot test their instance.
70
- // Totally open for suggestions how to test this better here
71
- expect ( getNativeFetchImplCalled ) . toBe ( true ) ;
82
+ expect ( makeNewFetchTransport ) . toHaveBeenCalledTimes ( 1 ) ;
83
+ expect ( makeNewXHRTransport ) . toHaveBeenCalledTimes ( 0 ) ;
72
84
} ) ;
73
85
74
86
it ( 'returns xhrTransports if fetch is not supported' , ( ) => {
@@ -80,9 +92,7 @@ describe('setupBrowserTransport', () => {
80
92
expect ( transport ) . toBeDefined ( ) ;
81
93
expect ( transport ) . toBeInstanceOf ( XHRTransport ) ;
82
94
expect ( newTransport ) . toBeDefined ( ) ;
83
- // This is a weird way of testing that `newTransport` is using fetch but it works.
84
- // Given that the new transports are functions, we cannot test their instance.
85
- // Totally open for suggestions how to test this better here
86
- expect ( getNativeFetchImplCalled ) . toBe ( false ) ;
95
+ expect ( makeNewFetchTransport ) . toHaveBeenCalledTimes ( 0 ) ;
96
+ expect ( makeNewXHRTransport ) . toHaveBeenCalledTimes ( 1 ) ;
87
97
} ) ;
88
98
} ) ;
0 commit comments