Skip to content

Commit b1b23ae

Browse files
watch: added tests for worker in -- watch mode to include worker file and nested dependencies
1 parent 930dc62 commit b1b23ae

File tree

2 files changed

+236
-69
lines changed

2 files changed

+236
-69
lines changed

test/parallel/test-watch-mode-worker.mjs

Lines changed: 0 additions & 67 deletions
This file was deleted.

test/sequential/test-watch-mode.mjs

Lines changed: 236 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import path from 'node:path';
55
import { execPath } from 'node:process';
66
import { describe, it } from 'node:test';
77
import { spawn } from 'node:child_process';
8-
import { writeFileSync, readFileSync, mkdirSync } from 'node:fs';
8+
import { writeFileSync, readFileSync, mkdirSync, write } from 'node:fs';
99
import { inspect } from 'node:util';
1010
import { pathToFileURL } from 'node:url';
1111
import { once } from 'node:events';
@@ -922,4 +922,238 @@ process.on('message', (message) => {
922922
await done();
923923
}
924924
});
925-
});
925+
926+
it('should watch changes to worker - cjs', async () => {
927+
const dir = tmpdir.resolve(`watch-worker-cjs-${Date.now()}`);
928+
mkdirSync(dir);
929+
930+
const worker = path.join(dir, 'worker.js');
931+
932+
writeFileSync(worker, `
933+
console.log("worker running");
934+
`);
935+
936+
const file = createTmpFile(`
937+
const { Worker } = require('node:worker_threads');
938+
939+
const w = new Worker(${JSON.stringify(worker)});
940+
w.on('exit', () => {
941+
console.log('running');
942+
});
943+
`, '.js', dir);
944+
945+
const { stderr, stdout } = await runWriteSucceed({
946+
file,
947+
watchedFile: worker,
948+
});
949+
950+
assert.strictEqual(stderr, '');
951+
assert.deepStrictEqual(stdout, [
952+
'worker running',
953+
'running',
954+
`Completed running ${inspect(file)}. Waiting for file changes before restarting...`,
955+
`Restarting ${inspect(file)}`,
956+
'worker running',
957+
'running',
958+
`Completed running ${inspect(file)}. Waiting for file changes before restarting...`,
959+
]);
960+
});
961+
962+
it('should watch changes to worker dependencies - cjs', async () => {
963+
const dir = tmpdir.resolve(`watch-worker-dep-cjs-${Date.now()}`);
964+
mkdirSync(dir);
965+
966+
const dep = path.join(dir, 'dep.js');
967+
const worker = path.join(dir, 'worker.js');
968+
969+
writeFileSync(dep, `
970+
module.exports = 'dep v1';
971+
`);
972+
973+
writeFileSync(worker, `
974+
const dep = require('./dep.js');
975+
console.log(dep);
976+
`);
977+
978+
const file = createTmpFile(`
979+
const { Worker } = require('node:worker_threads');
980+
981+
const w = new Worker(${JSON.stringify(worker)});
982+
w.on('exit', () => {
983+
console.log('running');
984+
});
985+
`, '.js', dir);
986+
987+
const { stderr, stdout } = await runWriteSucceed({
988+
file,
989+
watchedFile: dep,
990+
});
991+
992+
assert.strictEqual(stderr, '');
993+
assert.deepStrictEqual(stdout, [
994+
'dep v1',
995+
'running',
996+
`Completed running ${inspect(file)}. Waiting for file changes before restarting...`,
997+
`Restarting ${inspect(file)}`,
998+
'dep v1',
999+
'running',
1000+
`Completed running ${inspect(file)}. Waiting for file changes before restarting...`,
1001+
]);
1002+
});
1003+
1004+
it('should watch changes to nested worker dependencies - cjs', async () => {
1005+
const dir = tmpdir.resolve(`watch-worker-dep-cjs-${Date.now()}`);
1006+
mkdirSync(dir);
1007+
1008+
const subDep = path.join(dir, 'sub-dep.js');
1009+
const dep = path.join(dir, 'dep.js');
1010+
const worker = path.join(dir, 'worker.js');
1011+
1012+
writeFileSync(subDep, `
1013+
module.exports = 'sub-dep v1';
1014+
`);
1015+
1016+
writeFileSync(dep, `
1017+
const subDep = require('./sub-dep.js');
1018+
console.log(subDep);
1019+
module.exports = 'dep v1';
1020+
`);
1021+
1022+
writeFileSync(worker, `
1023+
const dep = require('./dep.js');
1024+
`);
1025+
1026+
const file = createTmpFile(`
1027+
const { Worker } = require('node:worker_threads');
1028+
1029+
const w = new Worker(${JSON.stringify(worker)});
1030+
w.on('exit', () => {
1031+
console.log('running');
1032+
});
1033+
`, '.js', dir);
1034+
1035+
const { stderr, stdout } = await runWriteSucceed({
1036+
file,
1037+
watchedFile: subDep,
1038+
});
1039+
1040+
assert.strictEqual(stderr, '');
1041+
assert.deepStrictEqual(stdout, [
1042+
'sub-dep v1',
1043+
'running',
1044+
`Completed running ${inspect(file)}. Waiting for file changes before restarting...`,
1045+
`Restarting ${inspect(file)}`,
1046+
'sub-dep v1',
1047+
'running',
1048+
`Completed running ${inspect(file)}. Waiting for file changes before restarting...`,
1049+
]);
1050+
});
1051+
1052+
it('should watch changes to worker - esm', async () => {
1053+
const dir = tmpdir.resolve(`watch-worker-esm-${Date.now()}`);
1054+
mkdirSync(dir);
1055+
1056+
const worker = path.join(dir, 'worker.mjs');
1057+
1058+
writeFileSync(worker, `
1059+
console.log("worker running");
1060+
`);
1061+
1062+
const file = createTmpFile(`
1063+
import { Worker } from 'node:worker_threads';
1064+
new Worker(new URL(${JSON.stringify(pathToFileURL(worker))}));
1065+
`, '.mjs', dir);
1066+
1067+
const { stderr, stdout } = await runWriteSucceed({
1068+
file,
1069+
watchedFile: worker,
1070+
});
1071+
1072+
assert.strictEqual(stderr, '');
1073+
assert.deepStrictEqual(stdout, [
1074+
'worker running',
1075+
`Completed running ${inspect(file)}. Waiting for file changes before restarting...`,
1076+
`Restarting ${inspect(file)}`,
1077+
'worker running',
1078+
`Completed running ${inspect(file)}. Waiting for file changes before restarting...`,
1079+
]);
1080+
});
1081+
1082+
it('should watch changes to worker dependencies - esm', async () => {
1083+
const dir = tmpdir.resolve(`watch-worker-dep-esm-${Date.now()}`);
1084+
mkdirSync(dir);
1085+
1086+
const dep = path.join(dir, 'dep.mjs');
1087+
const worker = path.join(dir, 'worker.mjs');
1088+
1089+
writeFileSync(dep, `
1090+
export default 'dep v1';
1091+
`);
1092+
1093+
writeFileSync(worker, `
1094+
import dep from ${JSON.stringify(pathToFileURL(dep))};
1095+
console.log(dep);
1096+
`);
1097+
1098+
const file = createTmpFile(`
1099+
import { Worker } from 'node:worker_threads';
1100+
new Worker(new URL(${JSON.stringify(pathToFileURL(worker))}));
1101+
`, '.mjs', dir);
1102+
1103+
const { stderr, stdout } = await runWriteSucceed({
1104+
file,
1105+
watchedFile: dep,
1106+
});
1107+
1108+
assert.strictEqual(stderr, '');
1109+
assert.deepStrictEqual(stdout, [
1110+
'dep v1',
1111+
`Completed running ${inspect(file)}. Waiting for file changes before restarting...`,
1112+
`Restarting ${inspect(file)}`,
1113+
'dep v1',
1114+
`Completed running ${inspect(file)}. Waiting for file changes before restarting...`,
1115+
]);
1116+
});
1117+
1118+
it('should watch changes to nested worker dependencies - esm', async () => {
1119+
const dir = tmpdir.resolve(`watch-worker-dep-esm-${Date.now()}`);
1120+
mkdirSync(dir);
1121+
1122+
const subDep = path.join(dir, 'sub-dep.mjs');
1123+
const dep = path.join(dir, 'dep.mjs');
1124+
const worker = path.join(dir, 'worker.mjs');
1125+
1126+
writeFileSync(subDep, `
1127+
export default 'sub-dep v1';
1128+
`);
1129+
1130+
writeFileSync(dep, `
1131+
import subDep from ${JSON.stringify(pathToFileURL(subDep))};
1132+
console.log(subDep);
1133+
export default 'dep v1';
1134+
`);
1135+
1136+
writeFileSync(worker, `
1137+
import dep from ${JSON.stringify(pathToFileURL(dep))};
1138+
`);
1139+
1140+
const file = createTmpFile(`
1141+
import { Worker } from 'node:worker_threads';
1142+
new Worker(new URL(${JSON.stringify(pathToFileURL(worker))}));
1143+
`, '.mjs', dir);
1144+
1145+
const { stderr, stdout } = await runWriteSucceed({
1146+
file,
1147+
watchedFile: subDep,
1148+
});
1149+
1150+
assert.strictEqual(stderr, '');
1151+
assert.deepStrictEqual(stdout, [
1152+
'sub-dep v1',
1153+
`Completed running ${inspect(file)}. Waiting for file changes before restarting...`,
1154+
`Restarting ${inspect(file)}`,
1155+
'sub-dep v1',
1156+
`Completed running ${inspect(file)}. Waiting for file changes before restarting...`,
1157+
]);
1158+
});
1159+
});

0 commit comments

Comments
 (0)