Skip to content

Commit 051c55a

Browse files
committed
🚨 Migrate new spec files from main to Vitest after rebase
1 parent a50d12f commit 051c55a

63 files changed

Lines changed: 3491 additions & 5413 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.gitlab-ci.yml‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,14 +282,18 @@ unit-bs:
282282
extends:
283283
- .base-configuration
284284
- .bs-allowed-branches
285+
- .resource-allocation-4-cpus
285286
interruptible: true
286287
resource_group: browserstack
288+
timeout: 35 minutes
287289
artifacts:
290+
when: always
288291
reports:
289292
junit: test-report/unit-bs/*.xml
290293
script:
291294
- yarn
292-
- node scripts/test/ci-bs.ts test:unit
295+
- yarn playwright install --with-deps
296+
- FORCE_COLOR=1 node scripts/test/ci-bs.ts test:unit
293297
after_script:
294298
- node ./scripts/test/export-test-result.ts unit-bs
295299

‎developer-extension/package.json‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"@types/react": "19.2.14",
1212
"@types/react-dom": "19.2.3",
1313
"@wxt-dev/module-react": "1.2.2",
14-
"typescript": "6.0.2"
14+
"typescript": "6.0.2",
15+
"vite": "8.0.8"
1516
},
1617
"dependencies": {
1718
"@datadog/browser-core": "workspace:*",

‎packages/core/src/domain/contexts/tabContext.spec.ts‎

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { describe, it, expect, vi, beforeEach } from 'vitest'
12
import type { Hooks } from '../../../test'
23
import { createHooks, registerCleanupTask } from '../../../test'
34
import { HookNames } from '../../tools/abstractHooks'
@@ -26,9 +27,9 @@ describe('tabContext', () => {
2627
})
2728

2829
expect(event).toEqual(
29-
jasmine.objectContaining({
30-
tab: jasmine.objectContaining({
31-
id: jasmine.stringMatching(UUID_PATTERN),
30+
expect.objectContaining({
31+
tab: expect.objectContaining({
32+
id: expect.stringMatching(UUID_PATTERN),
3233
}),
3334
})
3435
)
@@ -69,7 +70,9 @@ describe('tabContext', () => {
6970
})
7071

7172
it('should generate a tab ID when sessionStorage.getItem throws', () => {
72-
spyOn(sessionStorage, 'getItem').and.throwError('SecurityError')
73+
vi.spyOn(sessionStorage, 'getItem').mockImplementation(() => {
74+
throw new Error('SecurityError')
75+
})
7376
startTabContext(hooks)
7477

7578
const event = hooks.triggerHook(HookNames.Assemble, {
@@ -80,8 +83,10 @@ describe('tabContext', () => {
8083
})
8184

8285
it('should generate a tab ID when sessionStorage.setItem throws', () => {
83-
spyOn(sessionStorage, 'getItem').and.returnValue(null)
84-
spyOn(sessionStorage, 'setItem').and.throwError('QuotaExceededError')
86+
vi.spyOn(sessionStorage, 'getItem').mockReturnValue(null)
87+
vi.spyOn(sessionStorage, 'setItem').mockImplementation(() => {
88+
throw new Error('QuotaExceededError')
89+
})
8590
startTabContext(hooks)
8691

8792
const event = hooks.triggerHook(HookNames.Assemble, {
@@ -92,7 +97,9 @@ describe('tabContext', () => {
9297
})
9398

9499
it('should return the same tab ID across multiple startTabContext calls when sessionStorage is unavailable', () => {
95-
spyOn(sessionStorage, 'getItem').and.throwError('SecurityError')
100+
vi.spyOn(sessionStorage, 'getItem').mockImplementation(() => {
101+
throw new Error('SecurityError')
102+
})
96103

97104
const hooks1 = createHooks()
98105
startTabContext(hooks1)

‎packages/core/src/domain/session/storeStrategies/sessionInCookie.spec.ts‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { vi, describe, expect, it } from 'vitest'
1+
import { vi, beforeEach, describe, expect, it } from 'vitest'
22
import { mockClock, getSessionState, registerCleanupTask } from '../../../../test'
33
import { setCookie, deleteCookie, getCookie } from '../../../browser/cookie'
44
import type { SessionState } from '../sessionState'
@@ -8,6 +8,13 @@ import { SESSION_COOKIE_EXPIRATION_DELAY, SESSION_EXPIRATION_DELAY, SESSION_TIME
88
import { buildCookieOptions, selectCookieStrategy, initCookieStrategy } from './sessionInCookie'
99
import { SESSION_STORE_KEY } from './sessionStoreStrategy'
1010

11+
// Safari on BrowserStack cannot access cookies because vitest runs tests in an iframe
12+
// and BrowserStack replaces localhost with bs-local.com, triggering Safari's ITP restrictions.
13+
// https://www.browserstack.com/support/faq/local-testing/local-exceptions/i-face-issues-while-testing-localhost-urls-or-private-servers-in-safari-on-macos-os-x-and-ios
14+
beforeEach((ctx) => {
15+
ctx.skip(navigator.userAgent.includes('Safari') && !navigator.userAgent.includes('Chrome'), 'Safari on BrowserStack')
16+
})
17+
1118
const DEFAULT_INIT_CONFIGURATION = { clientToken: 'abc', trackAnonymousUser: true }
1219

1320
function setupCookieStrategy(partialInitConfiguration: Partial<InitConfiguration> = {}) {

‎packages/core/src/tools/valueHistory.spec.ts‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -129,33 +129,33 @@ describe('valueHistory', () => {
129129
value: 'foo',
130130
startTime: 0 as RelativeTime,
131131
endTime: END_OF_TIMES,
132-
remove: jasmine.any(Function),
133-
close: jasmine.any(Function),
132+
remove: expect.any(Function),
133+
close: expect.any(Function),
134134
},
135135
])
136136
expect(valueHistory.getEntries(5 as RelativeTime)).toEqual([
137137
{
138138
value: 'qux',
139139
startTime: 5 as RelativeTime,
140140
endTime: 15 as RelativeTime,
141-
remove: jasmine.any(Function),
142-
close: jasmine.any(Function),
141+
remove: expect.any(Function),
142+
close: expect.any(Function),
143143
},
144144
{
145145
value: 'bar',
146146
startTime: 5 as RelativeTime,
147147
endTime: 10 as RelativeTime,
148-
remove: jasmine.any(Function),
149-
close: jasmine.any(Function),
148+
remove: expect.any(Function),
149+
close: expect.any(Function),
150150
},
151151
])
152152
expect(valueHistory.getEntries(10 as RelativeTime)).toEqual([
153153
{
154154
value: 'baz',
155155
startTime: 10 as RelativeTime,
156156
endTime: END_OF_TIMES,
157-
remove: jasmine.any(Function),
158-
close: jasmine.any(Function),
157+
remove: expect.any(Function),
158+
close: expect.any(Function),
159159
},
160160
])
161161
})

‎packages/core/src/transport/flushController.spec.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ describe('flushController', () => {
112112

113113
pageMayExitObservable.notify({ reason: 'before_unload' })
114114

115-
expect(flushSpy.calls.first().args[0].reason).toBe('before_unload')
115+
expect(flushSpy.mock.calls[0][0].reason).toBe('before_unload')
116116
})
117117

118118
it('notifies when the bytes limit is reached after adding a message', () => {

‎packages/core/test/forEach.spec.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { beforeEach, afterEach } from 'vitest'
12
import { resetManageResourceTimingBufferFull } from '../../rum-core/src/browser/performanceObservable'
23
import { resetExperimentalFeatures } from '../src/tools/experimentalFeatures'
34
import { resetValueHistoryGlobals } from '../src/tools/valueHistory'

‎packages/logs/src/boot/startLogs.spec.ts‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@ declare global {
4848
}
4949
}
5050

51+
// Safari on BrowserStack cannot access cookies because vitest runs tests in an iframe
52+
// and BrowserStack replaces localhost with bs-local.com, triggering Safari's ITP restrictions.
53+
// https://www.browserstack.com/support/faq/local-testing/local-exceptions/i-face-issues-while-testing-localhost-urls-or-private-servers-in-safari-on-macos-os-x-and-ios
54+
beforeEach((ctx) => {
55+
ctx.skip(navigator.userAgent.includes('Safari') && !navigator.userAgent.includes('Chrome'), 'Safari on BrowserStack')
56+
})
57+
5158
const DEFAULT_MESSAGE = { status: StatusType.info, message: 'message' }
5259
const COMMON_CONTEXT = {
5360
view: { referrer: 'common_referrer', url: 'common_url' },
@@ -130,7 +137,7 @@ describe('logs', () => {
130137
anonymous_id: expect.any(String),
131138
},
132139
tab: {
133-
id: jasmine.any(String),
140+
id: expect.any(String),
134141
},
135142
})
136143
})

‎packages/rum-angular/src/domain/angularPlugin.spec.ts‎

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { describe, it, expect, vi, beforeEach } from 'vitest'
12
import type { RumInitConfiguration, RumPublicApi } from '@datadog/browser-rum-core'
23
import { registerCleanupTask } from '../../../core/test'
34
import { angularPlugin, onRumInit, onRumStart, resetAngularPlugin } from './angularPlugin'
@@ -15,16 +16,16 @@ describe('angularPlugin', () => {
1516
it('returns a plugin object', () => {
1617
const plugin = angularPlugin()
1718
expect(plugin).toEqual(
18-
jasmine.objectContaining({
19+
expect.objectContaining({
1920
name: 'angular',
20-
onInit: jasmine.any(Function),
21-
onRumStart: jasmine.any(Function),
21+
onInit: expect.any(Function),
22+
onRumStart: expect.any(Function),
2223
})
2324
)
2425
})
2526

2627
it('calls callbacks registered with onRumInit during onInit', () => {
27-
const callbackSpy = jasmine.createSpy()
28+
const callbackSpy = vi.fn()
2829
const pluginConfiguration = {}
2930
onRumInit(callbackSpy)
3031

@@ -36,12 +37,12 @@ describe('angularPlugin', () => {
3637
})
3738

3839
expect(callbackSpy).toHaveBeenCalledTimes(1)
39-
expect(callbackSpy.calls.mostRecent().args[0]).toBe(pluginConfiguration)
40-
expect(callbackSpy.calls.mostRecent().args[1]).toBe(PUBLIC_API)
40+
expect(callbackSpy.mock.lastCall![0]).toBe(pluginConfiguration)
41+
expect(callbackSpy.mock.lastCall![1]).toBe(PUBLIC_API)
4142
})
4243

4344
it('calls callbacks immediately if onInit was already invoked', () => {
44-
const callbackSpy = jasmine.createSpy()
45+
const callbackSpy = vi.fn()
4546
const pluginConfiguration = {}
4647
angularPlugin(pluginConfiguration).onInit!({
4748
publicApi: PUBLIC_API,
@@ -51,8 +52,8 @@ describe('angularPlugin', () => {
5152
onRumInit(callbackSpy)
5253

5354
expect(callbackSpy).toHaveBeenCalledTimes(1)
54-
expect(callbackSpy.calls.mostRecent().args[0]).toBe(pluginConfiguration)
55-
expect(callbackSpy.calls.mostRecent().args[1]).toBe(PUBLIC_API)
55+
expect(callbackSpy.mock.lastCall![0]).toBe(pluginConfiguration)
56+
expect(callbackSpy.mock.lastCall![1]).toBe(PUBLIC_API)
5657
})
5758

5859
it('enforce manual view tracking when router is enabled', () => {
@@ -77,8 +78,8 @@ describe('angularPlugin', () => {
7778
})
7879

7980
it('calls onRumStart subscribers during onRumStart', () => {
80-
const callbackSpy = jasmine.createSpy()
81-
const addErrorSpy = jasmine.createSpy()
81+
const callbackSpy = vi.fn()
82+
const addErrorSpy = vi.fn()
8283
onRumStart(callbackSpy)
8384

8485
angularPlugin().onRumStart!({ addError: addErrorSpy })
@@ -87,10 +88,10 @@ describe('angularPlugin', () => {
8788
})
8889

8990
it('calls onRumStart subscribers immediately if already started', () => {
90-
const addErrorSpy = jasmine.createSpy()
91+
const addErrorSpy = vi.fn()
9192
angularPlugin().onRumStart!({ addError: addErrorSpy })
9293

93-
const callbackSpy = jasmine.createSpy()
94+
const callbackSpy = vi.fn()
9495
onRumStart(callbackSpy)
9596

9697
expect(callbackSpy).toHaveBeenCalledWith(addErrorSpy)

‎packages/rum-angular/src/domain/angularRouter/startAngularView.spec.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { describe, it, expect } from 'vitest'
12
import { computeViewName } from './startAngularView'
23
import type { RouteSnapshot } from './types'
34

0 commit comments

Comments
 (0)