From 903f3b9b76561e2df33ccf383229d8eb45f2ccbf Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 13 Jan 2025 22:34:25 +0900 Subject: [PATCH] fix(browser): fix `console.time` with fake timers (#7207) --- packages/browser/src/client/tester/logger.ts | 4 ++-- test/browser/specs/runner.test.ts | 2 ++ test/browser/test/timers.test.ts | 10 ++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/browser/src/client/tester/logger.ts b/packages/browser/src/client/tester/logger.ts index e2e5219cc204..69719227c01d 100644 --- a/packages/browser/src/client/tester/logger.ts +++ b/packages/browser/src/client/tester/logger.ts @@ -2,7 +2,7 @@ import { format, stringify } from 'vitest/utils' import { getConfig } from '../utils' import { rpc } from './rpc' -const { Date, console } = globalThis +const { Date, console, performance } = globalThis export function setupConsoleLogSpy() { const { @@ -71,7 +71,7 @@ export function setupConsoleLogSpy() { if (!(label in timeLabels)) { sendLog('stderr', `Timer "${label}" does not exist`) } - else if (start) { + else if (typeof start !== 'undefined') { const duration = end - start sendLog('stdout', `${label}: ${duration} ms`) } diff --git a/test/browser/specs/runner.test.ts b/test/browser/specs/runner.test.ts index 5b556db8a283..d0f72ec1cd6d 100644 --- a/test/browser/specs/runner.test.ts +++ b/test/browser/specs/runner.test.ts @@ -90,6 +90,8 @@ describe('running browser tests', async () => { expect(stdout).toContain('count: 3') expect(stdout).toMatch(/default: [\d.]+ ms/) expect(stdout).toMatch(/time: [\d.]+ ms/) + expect(stdout).toMatch(/\[console-time-fake\]: [\d.]+ ms/) + expect(stdout).not.toContain('[console-time-fake]: 0 ms') }) test('logs are redirected to stderr', () => { diff --git a/test/browser/test/timers.test.ts b/test/browser/test/timers.test.ts index c2e30b7d9da5..eff593353dc4 100644 --- a/test/browser/test/timers.test.ts +++ b/test/browser/test/timers.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import { afterEach, expect, it, vi } from 'vitest' afterEach(() => { @@ -17,3 +18,12 @@ it('only runs a setTimeout callback once (ever)', () => { vi.runAllTimers() expect(fn).toHaveBeenCalledTimes(1) }) + +it('console.time', async () => { + vi.useFakeTimers({ + toFake: ['Date', 'performance'], + }) + console.time('[console-time-fake]') + await new Promise(r => setTimeout(r, 500)) + console.timeEnd('[console-time-fake]') +})