Skip to content

Commit 85623a3

Browse files
authored
Merge pull request #402 from OpenAPI-Qraft/fix/flaky-asyncapi-test
fix: flaky asyncapi tests
2 parents 3ae0c86 + 07628d5 commit 85623a3

11 files changed

Lines changed: 272 additions & 20 deletions

File tree

.github/actions/spelling/expect.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ TSignal
113113
TValue
114114
TVariables
115115
typesafe
116+
unionfs
116117
unpkg
117118
Unpublishing
118119
URLTo

packages/asyncapi-plugin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"@types/js-yaml": "^4.0.9",
4646
"@types/node": "^20.16.5",
4747
"eslint": "^9.39.1",
48-
"memfs": "^4.11.1",
48+
"memfs": "^4.56.10",
4949
"rimraf": "^6.1.2",
5050
"rollup": "~4.22.5",
5151
"rollup-plugin-rename-node-modules": "^1.3.1",

packages/asyncapi-typescript-plugin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
"@qraft/test-utils": "workspace:*",
4949
"@types/node": "^20.16.5",
5050
"eslint": "^9.39.1",
51-
"memfs": "^4.11.1",
51+
"memfs": "^4.56.10",
5252
"rimraf": "^6.1.2",
5353
"vitest": "^3.2.4"
5454
},

packages/asyncapi-typescript-plugin/src/plugin.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { createFileHeader } from '@qraft/cli-utils';
55
import { describe, expect, it, test } from 'vitest';
66
import { asyncapiTypesFileNameOptionParser } from './plugin.js';
77

8-
describe.skip('asyncapi-typescript types generation', () => {
8+
describe('asyncapi-typescript types generation', () => {
99
const asyncAPIDocumentFixturePath = createRequire(process.cwd()).resolve(
1010
'@openapi-qraft/test-fixtures/asyncapi.json'
1111
);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { defineConfig } from 'vitest/config';
2+
3+
export default defineConfig({
4+
test: {
5+
// Increased timeout is required because AsyncAPI schema parsing with @asyncapi/parser
6+
// is CPU-intensive and slow on CI runners (typically 2 vCPU GitHub Actions).
7+
// The first few tests pay the full cost of parser initialization (~4-5s on CI),
8+
// while subsequent tests benefit from internal caching (~600ms).
9+
// Default Vitest timeout (5000ms) is too tight for CI, causing flaky failures.
10+
testTimeout: 30_000,
11+
},
12+
});

packages/openapi-plugin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
"@types/node": "^20.16.5",
5050
"@vitest/coverage-v8": "^3.2.4",
5151
"eslint": "^9.39.1",
52-
"memfs": "^4.11.1",
52+
"memfs": "^4.56.10",
5353
"rimraf": "^6.1.2",
5454
"typescript": "^5.6.2",
5555
"vitest": "^3.2.4"

packages/openapi-typescript-plugin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
"@qraft/test-utils": "workspace:*",
5050
"@types/node": "^20.16.5",
5151
"eslint": "^9.39.1",
52-
"memfs": "^4.11.1",
52+
"memfs": "^4.56.10",
5353
"rimraf": "^6.1.2",
5454
"vitest": "^3.2.4"
5555
},

packages/tanstack-query-react-plugin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"@qraft/test-utils": "workspace:*",
5353
"camelcase": "^8.0.0",
5454
"eslint": "^9.39.1",
55-
"memfs": "^4.11.1",
55+
"memfs": "^4.56.10",
5656
"rimraf": "^6.1.2",
5757
"vitest": "^3.2.4"
5858
},

packages/test-utils/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@
1515
"@openapi-qraft/eslint-config": "workspace:*",
1616
"@types/node": "^20.16.5",
1717
"eslint": "^9.39.1",
18-
"memfs": "^4.11.1",
18+
"memfs": "^4.56.10",
1919
"rimraf": "^6.1.2",
2020
"typescript": "^5.6.2",
21+
"unionfs": "^4.6.0",
2122
"vitest": "^3.2.4"
2223
},
2324
"files": [
Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,49 @@
11
import { vi } from 'vitest';
22

3-
const createMemFs = vi.hoisted(
4-
() => async (_fsOriginal: typeof import('node:fs')) => {
3+
const createUnionFs = vi.hoisted(
4+
() => async (fsOriginal: typeof import('node:fs')) => {
55
const { Volume, createFsFromVolume } = await import('memfs');
6+
const { ufs } = await import('unionfs');
67

7-
return createFsFromVolume(Volume.fromJSON({}));
8+
const memFs = createFsFromVolume(Volume.fromJSON({}));
9+
const union = ufs.use(memFs as never).use(fsOriginal as never);
10+
11+
if (union.promises && typeof fsOriginal.promises?.rm === 'function') {
12+
const memFsPromises = (
13+
memFs as {
14+
promises?: { rm?: (path: string, options?: object) => Promise<void> };
15+
}
16+
).promises;
17+
(
18+
union.promises as {
19+
rm: (path: string, options?: object) => Promise<void>;
20+
}
21+
).rm = async (path, options) => {
22+
if (typeof memFsPromises?.rm === 'function') {
23+
try {
24+
return await memFsPromises.rm(path, options);
25+
} catch {
26+
return await fsOriginal.promises.rm(path, options);
27+
}
28+
}
29+
return await fsOriginal.promises.rm(path, options);
30+
};
31+
}
32+
33+
return union;
834
}
935
);
1036

1137
vi.mock('node:fs', async (importOriginal) => {
1238
return {
13-
default: await createMemFs(
39+
default: await createUnionFs(
1440
await importOriginal<typeof import('node:fs')>()
1541
),
1642
};
1743
});
1844

1945
vi.mock('fs', async (importOriginal) => {
2046
return {
21-
default: await createMemFs(await importOriginal<typeof import('fs')>()),
47+
default: await createUnionFs(await importOriginal<typeof import('fs')>()),
2248
};
2349
});

0 commit comments

Comments
 (0)