Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions packages/browser/src/client/public/esm-client-injector.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@
if (config.testNamePattern)
config.testNamePattern = parseRegexp(config.testNamePattern);

if (config.retry?.condition)
config.retry.condition = parseRegexp(config.retry.condition);

function parseRegexp(input) {
// Parse input
const m = input.match(/(\/?)(.+)\1([a-z]*)/i);
Expand Down
16 changes: 10 additions & 6 deletions packages/browser/src/node/project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,11 +129,15 @@ export class ProjectBrowser implements IProjectBrowser {
}

function wrapConfig(config: SerializedConfig): SerializedConfig {
return {
...config,
// workaround RegExp serialization
testNamePattern: config.testNamePattern
? (config.testNamePattern.toString() as any as RegExp)
: undefined,
config = { ...config }

// workaround RegExp serialization
config.testNamePattern &&= config.testNamePattern.toString() as any as RegExp

// workaround RegExp serialization
if (typeof config.retry === 'object') {
config.retry.condition &&= config.retry.condition.toString() as any as RegExp
}

return config
}
23 changes: 23 additions & 0 deletions test/browser/specs/retry-condition.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { expect, test } from 'vitest'
import { runInlineBrowserTests } from './utils'

test('test.retry.condition is corrrectly serialized', async () => {
const { stderr, results } = await runInlineBrowserTests({
'basic.test.js': /* js */`
import { expect, test } from 'vitest'

test('task.retry.condition is corrrectly deserialized', ({ task }) => {
expect(task.retry.condition).toBeInstanceOf(RegExp)
expect(task.retry.condition).toStrictEqual(/retry_this/)
})
`,
}, {
retry: {
condition: /retry_this/,
},
})
expect(stderr).toBe('')
for (const result of results) {
expect(result.state()).toBe('passed')
}
})
21 changes: 21 additions & 0 deletions test/core/test/retry-condition.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type { TestError } from 'vitest'
import { describe, expect, it } from 'vitest'
import { runInlineTests } from '../../test-utils'

// Test with RegExp condition that eventually passes
let matchingCount = 0
Expand Down Expand Up @@ -69,3 +70,23 @@
// Second attempt succeeds
})
})

it('test.retry.condition is corrrectly serialized', async () => {
const { stderr, results } = await runInlineTests({
Comment thread
hi-ogawa marked this conversation as resolved.
Outdated
'basic.test.js': /* js */`
import { expect, test } from 'vitest'

test('task.retry.condition is corrrectly deserialized', ({ task }) => {
expect(task.retry.condition).toBeInstanceOf(RegExp)
expect(task.retry.condition).toStrictEqual(/retry_this/)
})
`,
}, {
retry: {
condition: /retry_this/,
},
})
expect(stderr).toBe('')

Check failure on line 89 in test/core/test/retry-condition.test.ts

View workflow job for this annotation

GitHub Actions / Rolldown&Test: node-22, macos-latest

[vmThreads] test/retry-condition.test.ts > test.retry.condition is corrrectly serialized

AssertionError: expected 'Error: Value is non of these types `B…' to be '' // Object.is equality - Expected + Received + Error: Value is non of these types `BindingPluginOptions`, `BindingBuiltinPlugin`, on BindingInputOptions.plugins on BindingBundlerOptions.inputOptions + at RolldownBuild.#build (file:///Users/runner/work/vitest/vitest/node_modules/.pnpm/rolldown@1.0.0-rc.10/node_modules/rolldown/dist/shared/rolldown-build-yQC7KN8K.mjs:3310:38) + at bundleConfigFile (file:///Users/runner/work/vitest/vitest/node_modules/.pnpm/vite@8.0.1_@types+node@24.12.0_esbuild@0.27.3_jiti@2.6.1_sass-embedded@1.97.3_sass@1.97_e4ee515d1a2f171a8256323a9ea56ce1/node_modules/vite/dist/node/chunks/node.js:34495:17) + at bundleAndLoadConfigFile (file:///Users/runner/work/vitest/vitest/node_modules/.pnpm/vite@8.0.1_@types+node@24.12.0_esbuild@0.27.3_jiti@2.6.1_sass-embedded@1.97.3_sass@1.97_e4ee515d1a2f171a8256323a9ea56ce1/node_modules/vite/dist/node/chunks/node.js:34403:18) + at loadConfigFromFile (file:///Users/runner/work/vitest/vitest/node_modules/.pnpm/vite@8.0.1_@types+node@24.12.0_esbuild@0.27.3_jiti@2.6.1_sass-embedded@1.97.3_sass@1.97_e4ee515d1a2f171a8256323a9ea56ce1/node_modules/vite/dist/node/chunks/node.js:34372:42) + at resolveConfig (file:///Users/runner/work/vitest/vitest/node_modules/.pnpm/vite@8.0.1_@types+node@24.12.0_esbuild@0.27.3_jiti@2.6.1_sass-embedded@1.97.3_sass@1.97_e4ee515d1a2f171a8256323a9ea56ce1/node_modules/vite/dist/node/chunks/node.js:33996:22) + at _createServer (file:///Users/runner/work/vitest/vitest/node_modules/.pnpm/vite@8.0.1_@types+node@24.12.0_esbuild@0.27.3_jiti@2.6.1_sass-embedded@1.97.3_sass@1.97_e4ee515d1a2f171a8256323a9ea56ce1/node_modules/vite/dist/node/chunks/node.js:25892:65) + at createViteServer (file:///Users/runner/work/vitest/vitest/packages/vitest/dist/chunks/cli-api.DRKXaDFO.js:8818:17) + at createVitest (file:///Users/runner/work/vitest/vitest/packages/vitest/dist/chunks/cli-api.DRKXaDFO.js:14086:18) + at prepareVitest (file:///Users/runner/work/vitest/vitest/packages/vitest/dist/chunks/cli-api.DRKXaDFO.js:14453:14) + at startVitest (file:///Users/runner/work/vitest/vitest/packages/vitest/dist/chunks/cli-api.DRKXaDFO.js:14396:14) { + code: 'InvalidArg' + } ❯ test/retry-condition.test.ts:89:18
expect(results).toHaveLength(1)
expect(results[0].state()).toBe('passed')
})
Loading