|
1 |
| -import { Span, Transaction } from '../../src'; |
2 |
| -import { _startChild, _addResourceSpans, MetricsInstrumentation, ResourceEntry } from '../../src/browser/metrics'; |
3 |
| -import { addDOMPropertiesToGlobal } from '../testutils'; |
4 |
| - |
5 |
| -// eslint-disable-next-line @typescript-eslint/no-explicit-any, no-var |
6 |
| -declare var global: any; |
7 |
| - |
8 |
| -describe('_startChild()', () => { |
9 |
| - it('creates a span with given properties', () => { |
10 |
| - const transaction = new Transaction({ name: 'test' }); |
11 |
| - const span = _startChild(transaction, { |
12 |
| - description: 'evaluation', |
13 |
| - op: 'script', |
14 |
| - }); |
| 1 | +import { Transaction } from '../../../src'; |
| 2 | +import { _addResourceSpans, _addMeasureSpans, ResourceEntry } from '../../../src/browser/metrics'; |
15 | 3 |
|
16 |
| - expect(span).toBeInstanceOf(Span); |
17 |
| - expect(span.description).toBe('evaluation'); |
18 |
| - expect(span.op).toBe('script'); |
| 4 | +describe('_addMeasureSpans', () => { |
| 5 | + const transaction = new Transaction({ op: 'pageload', name: '/' }); |
| 6 | + beforeEach(() => { |
| 7 | + transaction.startChild = jest.fn(); |
19 | 8 | });
|
20 | 9 |
|
21 |
| - it('adjusts the start timestamp if child span starts before transaction', () => { |
22 |
| - const transaction = new Transaction({ name: 'test', startTimestamp: 123 }); |
23 |
| - const span = _startChild(transaction, { |
24 |
| - description: 'script.js', |
25 |
| - op: 'resource', |
26 |
| - startTimestamp: 100, |
27 |
| - }); |
| 10 | + it('adds measure spans to a transaction', () => { |
| 11 | + const entry: Omit<PerformanceMeasure, 'toJSON'> = { |
| 12 | + entryType: 'measure', |
| 13 | + name: 'measure-1', |
| 14 | + duration: 10, |
| 15 | + startTime: 12, |
| 16 | + }; |
28 | 17 |
|
29 |
| - expect(transaction.startTimestamp).toEqual(span.startTimestamp); |
30 |
| - expect(transaction.startTimestamp).toEqual(100); |
31 |
| - }); |
| 18 | + const timeOrigin = 100; |
| 19 | + const startTime = 23; |
| 20 | + const duration = 356; |
32 | 21 |
|
33 |
| - it('does not adjust start timestamp if child span starts after transaction', () => { |
34 |
| - const transaction = new Transaction({ name: 'test', startTimestamp: 123 }); |
35 |
| - const span = _startChild(transaction, { |
36 |
| - description: 'script.js', |
37 |
| - op: 'resource', |
38 |
| - startTimestamp: 150, |
| 22 | + expect(transaction.startChild).toHaveBeenCalledTimes(0); |
| 23 | + _addMeasureSpans(transaction, entry, startTime, duration, timeOrigin); |
| 24 | + expect(transaction.startChild).toHaveBeenCalledTimes(1); |
| 25 | + expect(transaction.startChild).toHaveBeenLastCalledWith({ |
| 26 | + description: 'measure-1', |
| 27 | + startTimestamp: timeOrigin + startTime, |
| 28 | + endTimestamp: timeOrigin + startTime + duration, |
| 29 | + op: 'measure', |
39 | 30 | });
|
40 |
| - |
41 |
| - expect(transaction.startTimestamp).not.toEqual(span.startTimestamp); |
42 |
| - expect(transaction.startTimestamp).toEqual(123); |
43 | 31 | });
|
44 | 32 | });
|
45 | 33 |
|
46 | 34 | describe('_addResourceSpans', () => {
|
47 |
| - const transaction = new Transaction({ name: 'hello' }); |
| 35 | + const transaction = new Transaction({ op: 'pageload', name: '/' }); |
48 | 36 | beforeEach(() => {
|
49 | 37 | transaction.startChild = jest.fn();
|
50 | 38 | });
|
@@ -169,54 +157,3 @@ describe('_addResourceSpans', () => {
|
169 | 157 | );
|
170 | 158 | });
|
171 | 159 | });
|
172 |
| - |
173 |
| -// TODO: Add these tests back |
174 |
| -// describe('MetricsInstrumentation', () => { |
175 |
| -// afterEach(() => { |
176 |
| -// jest.clearAllMocks(); |
177 |
| -// }); |
178 |
| - |
179 |
| -// it('does not initialize trackers when on node', () => { |
180 |
| -// const trackers = ['_trackCLS', '_trackLCP', '_trackFID'].map(tracker => |
181 |
| -// jest.spyOn(MetricsInstrumentation.prototype as any, tracker), |
182 |
| -// ); |
183 |
| - |
184 |
| -// new MetricsInstrumentation(); |
185 |
| - |
186 |
| -// trackers.forEach(tracker => expect(tracker).not.toBeCalled()); |
187 |
| -// }); |
188 |
| - |
189 |
| -// it('initializes trackers when not on node and `global.performance` and `global.document` are available.', () => { |
190 |
| -// addDOMPropertiesToGlobal(['performance', 'document', 'addEventListener', 'window']); |
191 |
| - |
192 |
| -// const backup = global.process; |
193 |
| -// global.process = undefined; |
194 |
| - |
195 |
| -// const trackers = ['_trackCLS', '_trackLCP', '_trackFID'].map(tracker => |
196 |
| -// jest.spyOn(MetricsInstrumentation.prototype as any, tracker), |
197 |
| -// ); |
198 |
| -// new MetricsInstrumentation(); |
199 |
| -// global.process = backup; |
200 |
| - |
201 |
| -// trackers.forEach(tracker => expect(tracker).toBeCalled()); |
202 |
| -// }); |
203 |
| - |
204 |
| -// it('does not initialize trackers when not on node but `global.document` is not available (in worker)', () => { |
205 |
| -// // window not necessary for this test, but it is here to exercise that it is absence of document that is checked |
206 |
| -// addDOMPropertiesToGlobal(['performance', 'addEventListener', 'window']); |
207 |
| - |
208 |
| -// const processBackup = global.process; |
209 |
| -// global.process = undefined; |
210 |
| -// const documentBackup = global.document; |
211 |
| -// global.document = undefined; |
212 |
| - |
213 |
| -// const trackers = ['_trackCLS', '_trackLCP', '_trackFID'].map(tracker => |
214 |
| -// jest.spyOn(MetricsInstrumentation.prototype as any, tracker), |
215 |
| -// ); |
216 |
| -// new MetricsInstrumentation(); |
217 |
| -// global.process = processBackup; |
218 |
| -// global.document = documentBackup; |
219 |
| - |
220 |
| -// trackers.forEach(tracker => expect(tracker).not.toBeCalled()); |
221 |
| -// }); |
222 |
| -// }); |
0 commit comments