Skip to content

Commit 2b73b72

Browse files
committed
test: ensure atime and mtime are rounded consistently in tests
Node.js handles time precision differently, which may cause mtime-based tests to fail. This update ensures that atime and mtime values are rounded to the same precision, preventing inconsistencies in file timestamp comparisons.
1 parent 1f62b28 commit 2b73b72

File tree

1 file changed

+27
-13
lines changed

1 file changed

+27
-13
lines changed

Diff for: tests/legacy-cli/e2e/tests/build/assets.ts

+27-13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import assert from 'node:assert/strict';
2-
import * as fs from 'node:fs';
3-
import { expectFileToExist, expectFileToMatch, writeFile } from '../../utils/fs';
2+
import { writeFile, stat, mkdir, symlink, utimes } from 'node:fs/promises';
3+
import { expectFileToExist, expectFileToMatch } from '../../utils/fs';
44
import { ng } from '../../utils/process';
55
import { updateJsonFile } from '../../utils/project';
66
import { expectToFail } from '../../utils/utils';
@@ -9,21 +9,31 @@ import { getGlobalVariable } from '../../utils/env';
99
const isNodeV22orHigher = Number(process.versions.node.split('.', 1)[0]) >= 22;
1010

1111
export default async function () {
12+
// Update the atime and mtime of the original file.
13+
// Note: Node.js has different time precision, which may cause mtime-based tests to fail.
14+
// Ensure both values are rounded to the same precision for consistency.
15+
// Example:
16+
// Original: '1742973507738.0234'
17+
// Node.js CP: '1742973507737.999'
18+
const { atime, mtime } = await stat('public/favicon.ico');
19+
await utimes('public/favicon.ico', atime, mtime);
20+
1221
await writeFile('public/.file', '');
1322
await writeFile('public/test.abc', 'hello world');
1423

15-
const originalStats = fs.statSync('public/favicon.ico', { bigint: true });
16-
1724
await ng('build', '--configuration=development');
18-
1925
await expectFileToExist('dist/test-project/browser/favicon.ico');
2026
await expectFileToExist('dist/test-project/browser/.file');
2127
await expectFileToMatch('dist/test-project/browser/test.abc', 'hello world');
2228
await expectToFail(() => expectFileToExist('dist/test-project/browser/.gitkeep'));
2329

2430
// Timestamp preservation only supported with application build system on Node.js v22+
2531
if (isNodeV22orHigher && getGlobalVariable('argv')['esbuild']) {
26-
const outputStats = fs.statSync('dist/test-project/browser/favicon.ico', { bigint: true });
32+
const [originalStats, outputStats] = await Promise.all([
33+
stat('public/favicon.ico'),
34+
stat('dist/test-project/browser/favicon.ico'),
35+
]);
36+
2737
assert.equal(
2838
originalStats.mtimeMs,
2939
outputStats.mtimeMs,
@@ -38,13 +48,17 @@ export default async function () {
3848
{ glob: '**/*', input: 'public', followSymlinks: true },
3949
];
4050
});
41-
fs.mkdirSync('dirToSymlink/subdir1', { recursive: true });
42-
fs.mkdirSync('dirToSymlink/subdir2/subsubdir1', { recursive: true });
43-
fs.writeFileSync('dirToSymlink/a.txt', '');
44-
fs.writeFileSync('dirToSymlink/subdir1/b.txt', '');
45-
fs.writeFileSync('dirToSymlink/subdir2/c.txt', '');
46-
fs.writeFileSync('dirToSymlink/subdir2/subsubdir1/d.txt', '');
47-
fs.symlinkSync(process.cwd() + '/dirToSymlink', 'public/symlinkDir');
51+
52+
await mkdir('dirToSymlink/subdir1', { recursive: true });
53+
await mkdir('dirToSymlink/subdir2/subsubdir1', { recursive: true });
54+
await symlink(process.cwd() + '/dirToSymlink', 'public/symlinkDir');
55+
56+
await Promise.all([
57+
writeFile('dirToSymlink/a.txt', ''),
58+
writeFile('dirToSymlink/subdir1/b.txt', ''),
59+
writeFile('dirToSymlink/subdir2/c.txt', ''),
60+
writeFile('dirToSymlink/subdir2/subsubdir1/d.txt', ''),
61+
]);
4862

4963
await ng('build', '--configuration=development');
5064

0 commit comments

Comments
 (0)