test-gen-js 0.1.3 โ 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -2
- package/README.md +129 -9
- package/dist/cli.js +21 -18
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts +6 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +11 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +14 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +232 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/scan.d.ts +30 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +161 -0
- package/dist/commands/scan.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,9 +9,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
### Planned
|
|
11
11
|
- Directory scanning (`scan` command)
|
|
12
|
-
- Configuration file support (`.testgenrc.js`)
|
|
13
12
|
- Node.js backend support
|
|
14
13
|
- Custom templates
|
|
14
|
+
- Watch mode
|
|
15
|
+
- Prettier/ESLint integration
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## [0.2.0] - 2024-01-07
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
- ๐ `init` command - Initialize test-gen-js configuration
|
|
23
|
+
- Creates `.testgenrc.js` configuration file
|
|
24
|
+
- Sets up Git hooks with husky and lint-staged
|
|
25
|
+
- Pre-commit hook runs tests automatically before each commit
|
|
26
|
+
- ๐ `scan` command - Scan directory and generate tests for all files
|
|
27
|
+
- Batch generate tests for entire directories
|
|
28
|
+
- Dry-run mode to preview without creating files
|
|
29
|
+
- Progress tracking and summary report
|
|
30
|
+
- Skip files with no components/functions
|
|
31
|
+
- Configuration file support (`.testgenrc.js`)
|
|
32
|
+
|
|
33
|
+
### Commands
|
|
34
|
+
- `test-gen-js init` - Initialize configuration and Git hooks
|
|
35
|
+
- `--no-hooks` - Skip Git hooks setup
|
|
36
|
+
- `--force` - Overwrite existing configuration
|
|
37
|
+
- `test-gen-js scan <directory>` - Scan and generate tests
|
|
38
|
+
- `--dry-run` - Preview without creating files
|
|
39
|
+
- `--pattern` - File pattern to match
|
|
40
|
+
- `--exclude` - Patterns to exclude
|
|
41
|
+
- `--snapshot` - Include snapshot tests
|
|
42
|
+
- `--overwrite` - Overwrite existing files
|
|
43
|
+
|
|
44
|
+
### How Pre-commit Testing Works
|
|
45
|
+
1. Run `npx test-gen-js init` in your project
|
|
46
|
+
2. Husky and lint-staged are automatically installed
|
|
47
|
+
3. When you run `git commit`, tests run for staged files
|
|
48
|
+
4. If tests pass, commit proceeds; if tests fail, commit is blocked
|
|
15
49
|
|
|
16
50
|
---
|
|
17
51
|
|
|
@@ -65,7 +99,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
65
99
|
|
|
66
100
|
---
|
|
67
101
|
|
|
68
|
-
[Unreleased]: https://github.com/liveforownhappiness/test-gen-js/compare/v0.
|
|
102
|
+
[Unreleased]: https://github.com/liveforownhappiness/test-gen-js/compare/v0.2.0...HEAD
|
|
103
|
+
[0.2.0]: https://github.com/liveforownhappiness/test-gen-js/compare/v0.1.0...v0.2.0
|
|
69
104
|
[0.1.0]: https://github.com/liveforownhappiness/test-gen-js/releases/tag/v0.1.0
|
|
70
105
|
[0.0.1]: https://github.com/liveforownhappiness/test-gen-js/releases/tag/v0.0.1
|
|
71
106
|
|
package/README.md
CHANGED
|
@@ -47,6 +47,44 @@ npm install -D test-gen-js
|
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
50
|
+
## ๐ ๏ธ Setup with Git Hooks (Recommended)
|
|
51
|
+
|
|
52
|
+
Set up automatic testing before each commit:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# 1. Install as dev dependency
|
|
56
|
+
npm install -D test-gen-js
|
|
57
|
+
|
|
58
|
+
# 2. Initialize (creates config + sets up Git hooks)
|
|
59
|
+
npx test-gen-js init
|
|
60
|
+
|
|
61
|
+
# 3. Generate tests for your components
|
|
62
|
+
npx test-gen-js generate src/components/Button.tsx
|
|
63
|
+
|
|
64
|
+
# 4. Now when you commit, tests run automatically!
|
|
65
|
+
git add .
|
|
66
|
+
git commit -m "feat: add Button component"
|
|
67
|
+
# ๐งช Running tests before commit...
|
|
68
|
+
# โ
Tests passed!
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### What `init` Does
|
|
72
|
+
|
|
73
|
+
| Item | Description |
|
|
74
|
+
|------|-------------|
|
|
75
|
+
| `.testgenrc.js` | Creates configuration file |
|
|
76
|
+
| `husky` | Installs Git hooks manager |
|
|
77
|
+
| `lint-staged` | Runs tests on staged files only |
|
|
78
|
+
| `pre-commit` | Tests run before each commit |
|
|
79
|
+
|
|
80
|
+
### Pre-commit Behavior
|
|
81
|
+
|
|
82
|
+
- โ
Tests pass โ Commit proceeds
|
|
83
|
+
- โ Tests fail โ Commit is **blocked**
|
|
84
|
+
- โญ๏ธ Skip with `git commit --no-verify` (not recommended)
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
50
88
|
## ๐ Quick Start
|
|
51
89
|
|
|
52
90
|
### 1. Generate React Component Tests
|
|
@@ -314,28 +352,109 @@ tgjs g src/components/Header.tsx -o __tests__/Header.test.tsx
|
|
|
314
352
|
tgjs g src/components/Header.tsx --overwrite
|
|
315
353
|
```
|
|
316
354
|
|
|
317
|
-
### `scan` (alias: `s`)
|
|
355
|
+
### `scan` (alias: `s`)
|
|
318
356
|
|
|
319
|
-
Scan directory and generate tests for all files
|
|
357
|
+
Scan directory and generate tests for all files at once.
|
|
320
358
|
|
|
321
359
|
```bash
|
|
322
|
-
# Basic usage
|
|
323
|
-
test-gen-js scan
|
|
360
|
+
# Basic usage - scan entire src folder
|
|
361
|
+
test-gen-js scan src
|
|
362
|
+
tgjs s src
|
|
324
363
|
|
|
325
364
|
# Options
|
|
326
365
|
--dry-run # Preview without creating files
|
|
327
366
|
--pattern <glob> # File pattern (default: **/*.{ts,tsx,js,jsx})
|
|
328
367
|
--exclude <patterns> # Patterns to exclude
|
|
368
|
+
--snapshot # Include snapshot tests
|
|
369
|
+
--overwrite # Overwrite existing test files
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
**Examples:**
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
# Preview what will be generated (no files created)
|
|
376
|
+
tgjs scan src --dry-run
|
|
377
|
+
|
|
378
|
+
# Generate tests for all components in src/components
|
|
379
|
+
tgjs scan src/components
|
|
380
|
+
|
|
381
|
+
# Generate tests with snapshots
|
|
382
|
+
tgjs scan src --snapshot
|
|
383
|
+
|
|
384
|
+
# Overwrite existing test files
|
|
385
|
+
tgjs scan src --overwrite
|
|
386
|
+
|
|
387
|
+
# Custom pattern (only .tsx files)
|
|
388
|
+
tgjs scan src --pattern "**/*.tsx"
|
|
329
389
|
```
|
|
330
390
|
|
|
331
|
-
|
|
391
|
+
**Output example:**
|
|
332
392
|
|
|
333
|
-
|
|
393
|
+
```
|
|
394
|
+
๐ Scanning directory: /your-project/src
|
|
395
|
+
๐ Pattern: **/*.{ts,tsx,js,jsx}
|
|
396
|
+
๐ซ Exclude: node_modules/**, dist/**, **/*.test.*, ...
|
|
397
|
+
|
|
398
|
+
๐ฆ Processing files...
|
|
399
|
+
|
|
400
|
+
[1/5] โ
components/Button.tsx โ components/Button.test.tsx
|
|
401
|
+
[2/5] โ
components/Card.tsx โ components/Card.test.tsx
|
|
402
|
+
[3/5] โญ๏ธ components/index.ts (no components/functions)
|
|
403
|
+
[4/5] โ
utils/helpers.ts โ utils/helpers.test.ts
|
|
404
|
+
[5/5] โ utils/broken.ts: Parse error
|
|
405
|
+
|
|
406
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
407
|
+
๐ Summary
|
|
408
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
409
|
+
Total files: 5
|
|
410
|
+
Created: 3
|
|
411
|
+
Updated: 0
|
|
412
|
+
Skipped: 1
|
|
413
|
+
Failed: 1
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### `init`
|
|
417
|
+
|
|
418
|
+
Initialize test-gen-js configuration and set up Git hooks for pre-commit testing.
|
|
334
419
|
|
|
335
420
|
```bash
|
|
421
|
+
# Basic usage - creates config and sets up Git hooks
|
|
336
422
|
test-gen-js init
|
|
423
|
+
|
|
424
|
+
# Options
|
|
425
|
+
--no-hooks # Skip Git hooks setup
|
|
426
|
+
--force # Overwrite existing configuration
|
|
337
427
|
```
|
|
338
428
|
|
|
429
|
+
**What it does:**
|
|
430
|
+
|
|
431
|
+
1. Creates `.testgenrc.js` configuration file
|
|
432
|
+
2. Installs `husky` and `lint-staged` (if not present)
|
|
433
|
+
3. Sets up pre-commit hook to run tests before each commit
|
|
434
|
+
|
|
435
|
+
**Example:**
|
|
436
|
+
|
|
437
|
+
```bash
|
|
438
|
+
# Install test-gen-js as dev dependency
|
|
439
|
+
npm install -D test-gen-js
|
|
440
|
+
|
|
441
|
+
# Initialize (sets up Git hooks)
|
|
442
|
+
npx test-gen-js init
|
|
443
|
+
|
|
444
|
+
# Now when you commit, tests will run automatically!
|
|
445
|
+
git add .
|
|
446
|
+
git commit -m "feat: add new component"
|
|
447
|
+
# ๐งช Running tests before commit...
|
|
448
|
+
# โ
Tests passed, commit successful!
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
**Pre-commit behavior:**
|
|
452
|
+
|
|
453
|
+
- Tests run only for **staged files** (files you're committing)
|
|
454
|
+
- If tests fail, commit is **blocked**
|
|
455
|
+
- If tests pass, commit proceeds normally
|
|
456
|
+
- Use `git commit --no-verify` to skip tests (not recommended)
|
|
457
|
+
|
|
339
458
|
---
|
|
340
459
|
|
|
341
460
|
## ๐ Supported Types
|
|
@@ -433,10 +552,11 @@ test-gen-js init
|
|
|
433
552
|
- [x] GitHub Actions CI/CD
|
|
434
553
|
- [x] Automated npm publishing
|
|
435
554
|
|
|
436
|
-
###
|
|
555
|
+
### โ
Phase 2: Extended Features (v0.2.x) - Current
|
|
437
556
|
|
|
438
|
-
- [
|
|
439
|
-
- [
|
|
557
|
+
- [x] Directory scanning and batch generation (`scan` command)
|
|
558
|
+
- [x] Configuration file support (`.testgenrc.js`)
|
|
559
|
+
- [x] Git hooks for pre-commit testing (`init` command)
|
|
440
560
|
- [ ] Node.js backend support
|
|
441
561
|
- [ ] Improved mock generation
|
|
442
562
|
- [ ] Prettier/ESLint integration
|
package/dist/cli.js
CHANGED
|
@@ -9,6 +9,7 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
9
9
|
const ora_1 = __importDefault(require("ora"));
|
|
10
10
|
const analyzer_1 = require("./analyzer");
|
|
11
11
|
const generator_1 = require("./generator");
|
|
12
|
+
const commands_1 = require("./commands");
|
|
12
13
|
const program = new commander_1.Command();
|
|
13
14
|
program
|
|
14
15
|
.name('test-gen-js')
|
|
@@ -71,22 +72,22 @@ program
|
|
|
71
72
|
.description('Scan directory and generate tests for all files')
|
|
72
73
|
.option('--dry-run', 'Preview without creating files', false)
|
|
73
74
|
.option('--pattern <glob>', 'File pattern to match', '**/*.{ts,tsx,js,jsx}')
|
|
74
|
-
.option('--exclude <patterns...>', 'Patterns to exclude'
|
|
75
|
+
.option('--exclude <patterns...>', 'Patterns to exclude')
|
|
76
|
+
.option('--snapshot', 'Include snapshot tests', false)
|
|
77
|
+
.option('--overwrite', 'Overwrite existing test files', false)
|
|
75
78
|
.action(async (directory, options) => {
|
|
76
|
-
const spinner = (0, ora_1.default)('Scanning directory...').start();
|
|
77
79
|
try {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
await (0, commands_1.scanCommand)(directory, {
|
|
81
|
+
pattern: options.pattern,
|
|
82
|
+
exclude: options.exclude,
|
|
83
|
+
dryRun: options.dryRun,
|
|
84
|
+
snapshot: options.snapshot,
|
|
85
|
+
overwrite: options.overwrite,
|
|
86
|
+
});
|
|
85
87
|
}
|
|
86
88
|
catch (error) {
|
|
87
|
-
spinner.fail(chalk_1.default.red('Failed to scan directory'));
|
|
88
89
|
if (error instanceof Error) {
|
|
89
|
-
console.error(chalk_1.default.red(error.message));
|
|
90
|
+
console.error(chalk_1.default.red('Error: ' + error.message));
|
|
90
91
|
}
|
|
91
92
|
process.exit(1);
|
|
92
93
|
}
|
|
@@ -94,17 +95,19 @@ program
|
|
|
94
95
|
// Init command
|
|
95
96
|
program
|
|
96
97
|
.command('init')
|
|
97
|
-
.description('Initialize test-gen-js configuration')
|
|
98
|
-
.
|
|
99
|
-
|
|
98
|
+
.description('Initialize test-gen-js configuration and Git hooks')
|
|
99
|
+
.option('--no-hooks', 'Skip Git hooks setup')
|
|
100
|
+
.option('--force', 'Overwrite existing configuration', false)
|
|
101
|
+
.action(async (options) => {
|
|
100
102
|
try {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
+
await (0, commands_1.initCommand)({
|
|
104
|
+
hooks: options.hooks,
|
|
105
|
+
force: options.force,
|
|
106
|
+
});
|
|
103
107
|
}
|
|
104
108
|
catch (error) {
|
|
105
|
-
spinner.fail(chalk_1.default.red('Failed to create configuration'));
|
|
106
109
|
if (error instanceof Error) {
|
|
107
|
-
console.error(chalk_1.default.red(error.message));
|
|
110
|
+
console.error(chalk_1.default.red('Error: ' + error.message));
|
|
108
111
|
}
|
|
109
112
|
process.exit(1);
|
|
110
113
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAsB;AACtB,yCAAyC;AACzC,2CAA2C;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Commands module
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.scanCommand = exports.initCommand = void 0;
|
|
7
|
+
var init_1 = require("./init");
|
|
8
|
+
Object.defineProperty(exports, "initCommand", { enumerable: true, get: function () { return init_1.initCommand; } });
|
|
9
|
+
var scan_1 = require("./scan");
|
|
10
|
+
Object.defineProperty(exports, "scanCommand", { enumerable: true, get: function () { return scan_1.scanCommand; } });
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+BAAqC;AAA5B,mGAAA,WAAW,OAAA;AACpB,+BAAqC;AAA5B,mGAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init Command
|
|
3
|
+
* Sets up test-gen-js configuration and Git hooks for pre-commit testing
|
|
4
|
+
*/
|
|
5
|
+
interface InitOptions {
|
|
6
|
+
hooks?: boolean;
|
|
7
|
+
force?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Initialize test-gen-js in a project
|
|
11
|
+
*/
|
|
12
|
+
export declare function initCommand(options?: InitOptions): Promise<void>;
|
|
13
|
+
export default initCommand;
|
|
14
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B1E;AA8MD,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Init Command
|
|
4
|
+
* Sets up test-gen-js configuration and Git hooks for pre-commit testing
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.initCommand = initCommand;
|
|
11
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
14
|
+
const ora_1 = __importDefault(require("ora"));
|
|
15
|
+
const child_process_1 = require("child_process");
|
|
16
|
+
/**
|
|
17
|
+
* Initialize test-gen-js in a project
|
|
18
|
+
*/
|
|
19
|
+
async function initCommand(options = {}) {
|
|
20
|
+
const { hooks = true, force = false } = options;
|
|
21
|
+
const cwd = process.cwd();
|
|
22
|
+
console.log('');
|
|
23
|
+
console.log(chalk_1.default.cyan('๐งช Initializing test-gen-js...'));
|
|
24
|
+
console.log('');
|
|
25
|
+
// Check if package.json exists
|
|
26
|
+
const packageJsonPath = path_1.default.join(cwd, 'package.json');
|
|
27
|
+
if (!(await fs_extra_1.default.pathExists(packageJsonPath))) {
|
|
28
|
+
throw new Error('package.json not found. Please run this command in a Node.js project.');
|
|
29
|
+
}
|
|
30
|
+
// Create configuration file
|
|
31
|
+
await createConfigFile(cwd, force);
|
|
32
|
+
// Setup Git hooks if requested
|
|
33
|
+
if (hooks) {
|
|
34
|
+
await setupGitHooks(cwd);
|
|
35
|
+
}
|
|
36
|
+
console.log('');
|
|
37
|
+
console.log(chalk_1.default.green('โ
test-gen-js initialized successfully!'));
|
|
38
|
+
console.log('');
|
|
39
|
+
console.log(chalk_1.default.cyan('Next steps:'));
|
|
40
|
+
console.log(' 1. Generate tests: ' + chalk_1.default.yellow('npx test-gen-js generate src/components/Button.tsx'));
|
|
41
|
+
console.log(' 2. Run tests: ' + chalk_1.default.yellow('npm test'));
|
|
42
|
+
console.log(' 3. Commit your code - tests will run automatically!');
|
|
43
|
+
console.log('');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create .testgenrc.js configuration file
|
|
47
|
+
*/
|
|
48
|
+
async function createConfigFile(cwd, force) {
|
|
49
|
+
const spinner = (0, ora_1.default)('Creating configuration file...').start();
|
|
50
|
+
const configPath = path_1.default.join(cwd, '.testgenrc.js');
|
|
51
|
+
if ((await fs_extra_1.default.pathExists(configPath)) && !force) {
|
|
52
|
+
spinner.info(chalk_1.default.yellow('.testgenrc.js already exists. Use --force to overwrite.'));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const configContent = `/**
|
|
56
|
+
* test-gen-js configuration
|
|
57
|
+
* @see https://github.com/liveforownhappiness/test-gen-js
|
|
58
|
+
*/
|
|
59
|
+
module.exports = {
|
|
60
|
+
// File patterns to include
|
|
61
|
+
include: ['src/**/*.{ts,tsx,js,jsx}'],
|
|
62
|
+
|
|
63
|
+
// File patterns to exclude
|
|
64
|
+
exclude: [
|
|
65
|
+
'node_modules',
|
|
66
|
+
'dist',
|
|
67
|
+
'build',
|
|
68
|
+
'**/*.test.*',
|
|
69
|
+
'**/*.spec.*',
|
|
70
|
+
'**/__tests__/**',
|
|
71
|
+
'**/__mocks__/**',
|
|
72
|
+
],
|
|
73
|
+
|
|
74
|
+
// Generator options
|
|
75
|
+
generator: {
|
|
76
|
+
// Include snapshot tests
|
|
77
|
+
snapshot: false,
|
|
78
|
+
|
|
79
|
+
// Auto-generate mocks
|
|
80
|
+
mock: true,
|
|
81
|
+
|
|
82
|
+
// Test file suffix (.test or .spec)
|
|
83
|
+
testSuffix: '.test',
|
|
84
|
+
|
|
85
|
+
// Overwrite existing test files
|
|
86
|
+
overwrite: false,
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
// Template options
|
|
90
|
+
templates: {
|
|
91
|
+
// Custom templates directory (optional)
|
|
92
|
+
// dir: './templates',
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
`;
|
|
96
|
+
await fs_extra_1.default.writeFile(configPath, configContent);
|
|
97
|
+
spinner.succeed(chalk_1.default.green('Created .testgenrc.js'));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Setup Git hooks with husky and lint-staged
|
|
101
|
+
*/
|
|
102
|
+
async function setupGitHooks(cwd) {
|
|
103
|
+
const spinner = (0, ora_1.default)('Setting up Git hooks...').start();
|
|
104
|
+
const packageJsonPath = path_1.default.join(cwd, 'package.json');
|
|
105
|
+
try {
|
|
106
|
+
// Read package.json
|
|
107
|
+
const packageJson = await fs_extra_1.default.readJson(packageJsonPath);
|
|
108
|
+
// Check if husky is already installed
|
|
109
|
+
const hasHusky = packageJson.devDependencies?.husky || packageJson.dependencies?.husky;
|
|
110
|
+
const hasLintStaged = packageJson.devDependencies?.['lint-staged'] || packageJson.dependencies?.['lint-staged'];
|
|
111
|
+
// Install husky and lint-staged if not present
|
|
112
|
+
if (!hasHusky || !hasLintStaged) {
|
|
113
|
+
spinner.text = 'Installing husky and lint-staged...';
|
|
114
|
+
const packagesToInstall = [];
|
|
115
|
+
if (!hasHusky)
|
|
116
|
+
packagesToInstall.push('husky');
|
|
117
|
+
if (!hasLintStaged)
|
|
118
|
+
packagesToInstall.push('lint-staged');
|
|
119
|
+
try {
|
|
120
|
+
(0, child_process_1.execSync)(`npm install -D ${packagesToInstall.join(' ')}`, {
|
|
121
|
+
cwd,
|
|
122
|
+
stdio: 'pipe',
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
spinner.warn(chalk_1.default.yellow('Could not install packages automatically. Please run:'));
|
|
127
|
+
console.log(chalk_1.default.cyan(` npm install -D ${packagesToInstall.join(' ')}`));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Re-read package.json after potential install
|
|
131
|
+
const updatedPackageJson = await fs_extra_1.default.readJson(packageJsonPath);
|
|
132
|
+
// Add lint-staged configuration
|
|
133
|
+
if (!updatedPackageJson['lint-staged']) {
|
|
134
|
+
updatedPackageJson['lint-staged'] = {
|
|
135
|
+
'*.{ts,tsx,js,jsx}': ['npm test -- --bail --findRelatedTests --passWithNoTests'],
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
// Add prepare script for husky
|
|
139
|
+
if (!updatedPackageJson.scripts) {
|
|
140
|
+
updatedPackageJson.scripts = {};
|
|
141
|
+
}
|
|
142
|
+
if (!updatedPackageJson.scripts.prepare) {
|
|
143
|
+
updatedPackageJson.scripts.prepare = 'husky install';
|
|
144
|
+
}
|
|
145
|
+
// Write updated package.json
|
|
146
|
+
await fs_extra_1.default.writeJson(packageJsonPath, updatedPackageJson, { spaces: 2 });
|
|
147
|
+
// Initialize husky
|
|
148
|
+
spinner.text = 'Initializing husky...';
|
|
149
|
+
const huskyDir = path_1.default.join(cwd, '.husky');
|
|
150
|
+
if (!(await fs_extra_1.default.pathExists(huskyDir))) {
|
|
151
|
+
try {
|
|
152
|
+
(0, child_process_1.execSync)('npx husky install', { cwd, stdio: 'pipe' });
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// husky install might fail if .git doesn't exist, that's ok
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Create pre-commit hook
|
|
159
|
+
spinner.text = 'Creating pre-commit hook...';
|
|
160
|
+
await fs_extra_1.default.ensureDir(huskyDir);
|
|
161
|
+
const preCommitPath = path_1.default.join(huskyDir, 'pre-commit');
|
|
162
|
+
const preCommitContent = `#!/usr/bin/env sh
|
|
163
|
+
. "$(dirname -- "$0")/_/husky.sh"
|
|
164
|
+
|
|
165
|
+
echo "๐งช Running tests before commit..."
|
|
166
|
+
npx lint-staged
|
|
167
|
+
`;
|
|
168
|
+
await fs_extra_1.default.writeFile(preCommitPath, preCommitContent);
|
|
169
|
+
await fs_extra_1.default.chmod(preCommitPath, '755');
|
|
170
|
+
// Create husky.sh helper if it doesn't exist
|
|
171
|
+
const huskyHelperDir = path_1.default.join(huskyDir, '_');
|
|
172
|
+
await fs_extra_1.default.ensureDir(huskyHelperDir);
|
|
173
|
+
const huskyShPath = path_1.default.join(huskyHelperDir, 'husky.sh');
|
|
174
|
+
if (!(await fs_extra_1.default.pathExists(huskyShPath))) {
|
|
175
|
+
const huskyShContent = `#!/usr/bin/env sh
|
|
176
|
+
if [ -z "$husky_skip_init" ]; then
|
|
177
|
+
debug () {
|
|
178
|
+
if [ "$HUSKY_DEBUG" = "1" ]; then
|
|
179
|
+
echo "husky (debug) - $1"
|
|
180
|
+
fi
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
readonly hook_name="$(basename -- "$0")"
|
|
184
|
+
debug "starting $hook_name..."
|
|
185
|
+
|
|
186
|
+
if [ "$HUSKY" = "0" ]; then
|
|
187
|
+
debug "HUSKY env variable is set to 0, skipping hook"
|
|
188
|
+
exit 0
|
|
189
|
+
fi
|
|
190
|
+
|
|
191
|
+
if [ -f ~/.huskyrc ]; then
|
|
192
|
+
debug "sourcing ~/.huskyrc"
|
|
193
|
+
. ~/.huskyrc
|
|
194
|
+
fi
|
|
195
|
+
|
|
196
|
+
readonly husky_skip_init=1
|
|
197
|
+
export husky_skip_init
|
|
198
|
+
sh -e "$0" "$@"
|
|
199
|
+
exitCode="$?"
|
|
200
|
+
|
|
201
|
+
if [ $exitCode != 0 ]; then
|
|
202
|
+
echo "husky - $hook_name hook exited with code $exitCode (error)"
|
|
203
|
+
fi
|
|
204
|
+
|
|
205
|
+
if [ $exitCode = 127 ]; then
|
|
206
|
+
echo "husky - command not found in PATH=$PATH"
|
|
207
|
+
fi
|
|
208
|
+
|
|
209
|
+
exit $exitCode
|
|
210
|
+
fi
|
|
211
|
+
`;
|
|
212
|
+
await fs_extra_1.default.writeFile(huskyShPath, huskyShContent);
|
|
213
|
+
await fs_extra_1.default.chmod(huskyShPath, '755');
|
|
214
|
+
}
|
|
215
|
+
spinner.succeed(chalk_1.default.green('Git hooks configured!'));
|
|
216
|
+
console.log('');
|
|
217
|
+
console.log(chalk_1.default.cyan('๐ What was set up:'));
|
|
218
|
+
console.log(' โข ' + chalk_1.default.yellow('husky') + ' - Git hooks manager');
|
|
219
|
+
console.log(' โข ' + chalk_1.default.yellow('lint-staged') + ' - Run tests on staged files');
|
|
220
|
+
console.log(' โข ' + chalk_1.default.yellow('pre-commit hook') + ' - Tests run before each commit');
|
|
221
|
+
console.log('');
|
|
222
|
+
console.log(chalk_1.default.cyan('๐ก How it works:'));
|
|
223
|
+
console.log(' When you run ' + chalk_1.default.yellow('git commit') + ', tests for changed files will run automatically.');
|
|
224
|
+
console.log(' If tests fail, the commit will be blocked.');
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
spinner.fail(chalk_1.default.red('Failed to setup Git hooks'));
|
|
228
|
+
throw error;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
exports.default = initCommand;
|
|
232
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scan Command
|
|
3
|
+
* Scans a directory and generates tests for all components/functions
|
|
4
|
+
*/
|
|
5
|
+
import type { GeneratedTest } from '../types';
|
|
6
|
+
interface ScanOptions {
|
|
7
|
+
pattern?: string;
|
|
8
|
+
exclude?: string[];
|
|
9
|
+
dryRun?: boolean;
|
|
10
|
+
snapshot?: boolean;
|
|
11
|
+
overwrite?: boolean;
|
|
12
|
+
}
|
|
13
|
+
interface ScanResult {
|
|
14
|
+
total: number;
|
|
15
|
+
created: number;
|
|
16
|
+
updated: number;
|
|
17
|
+
skipped: number;
|
|
18
|
+
failed: number;
|
|
19
|
+
files: GeneratedTest[];
|
|
20
|
+
errors: Array<{
|
|
21
|
+
file: string;
|
|
22
|
+
error: string;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Scan a directory and generate tests for all files
|
|
27
|
+
*/
|
|
28
|
+
export declare function scanCommand(directory: string, options?: ScanOptions): Promise<ScanResult>;
|
|
29
|
+
export default scanCommand;
|
|
30
|
+
//# sourceMappingURL=scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,KAAK,EAAoB,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CA0JrB;AAYD,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Scan Command
|
|
4
|
+
* Scans a directory and generates tests for all components/functions
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.scanCommand = scanCommand;
|
|
11
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
14
|
+
const ora_1 = __importDefault(require("ora"));
|
|
15
|
+
const glob_1 = require("glob");
|
|
16
|
+
const analyzer_1 = require("../analyzer");
|
|
17
|
+
const generator_1 = require("../generator");
|
|
18
|
+
/**
|
|
19
|
+
* Scan a directory and generate tests for all files
|
|
20
|
+
*/
|
|
21
|
+
async function scanCommand(directory, options = {}) {
|
|
22
|
+
const { pattern = '**/*.{ts,tsx,js,jsx}', exclude = [
|
|
23
|
+
'node_modules/**',
|
|
24
|
+
'dist/**',
|
|
25
|
+
'build/**',
|
|
26
|
+
'**/*.test.*',
|
|
27
|
+
'**/*.spec.*',
|
|
28
|
+
'**/__tests__/**',
|
|
29
|
+
'**/__mocks__/**',
|
|
30
|
+
'**/coverage/**',
|
|
31
|
+
], dryRun = false, snapshot = false, overwrite = false, } = options;
|
|
32
|
+
const cwd = process.cwd();
|
|
33
|
+
const targetDir = path_1.default.resolve(cwd, directory);
|
|
34
|
+
// Check if directory exists
|
|
35
|
+
if (!(await fs_extra_1.default.pathExists(targetDir))) {
|
|
36
|
+
throw new Error(`Directory not found: ${targetDir}`);
|
|
37
|
+
}
|
|
38
|
+
console.log('');
|
|
39
|
+
console.log(chalk_1.default.cyan('๐ Scanning directory:'), targetDir);
|
|
40
|
+
console.log(chalk_1.default.cyan('๐ Pattern:'), pattern);
|
|
41
|
+
console.log(chalk_1.default.cyan('๐ซ Exclude:'), exclude.join(', '));
|
|
42
|
+
if (dryRun) {
|
|
43
|
+
console.log(chalk_1.default.yellow('โ ๏ธ Dry run mode - no files will be created'));
|
|
44
|
+
}
|
|
45
|
+
console.log('');
|
|
46
|
+
// Find all matching files
|
|
47
|
+
const spinner = (0, ora_1.default)('Finding files...').start();
|
|
48
|
+
const files = await (0, glob_1.glob)(pattern, {
|
|
49
|
+
cwd: targetDir,
|
|
50
|
+
ignore: exclude,
|
|
51
|
+
absolute: true,
|
|
52
|
+
nodir: true,
|
|
53
|
+
});
|
|
54
|
+
spinner.succeed(`Found ${files.length} files`);
|
|
55
|
+
if (files.length === 0) {
|
|
56
|
+
console.log(chalk_1.default.yellow('No files found matching the pattern.'));
|
|
57
|
+
return {
|
|
58
|
+
total: 0,
|
|
59
|
+
created: 0,
|
|
60
|
+
updated: 0,
|
|
61
|
+
skipped: 0,
|
|
62
|
+
failed: 0,
|
|
63
|
+
files: [],
|
|
64
|
+
errors: [],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// Process each file
|
|
68
|
+
const result = {
|
|
69
|
+
total: files.length,
|
|
70
|
+
created: 0,
|
|
71
|
+
updated: 0,
|
|
72
|
+
skipped: 0,
|
|
73
|
+
failed: 0,
|
|
74
|
+
files: [],
|
|
75
|
+
errors: [],
|
|
76
|
+
};
|
|
77
|
+
console.log('');
|
|
78
|
+
console.log(chalk_1.default.cyan('๐ฆ Processing files...'));
|
|
79
|
+
console.log('');
|
|
80
|
+
for (let i = 0; i < files.length; i++) {
|
|
81
|
+
const file = files[i];
|
|
82
|
+
const relativePath = path_1.default.relative(cwd, file);
|
|
83
|
+
const progress = `[${i + 1}/${files.length}]`;
|
|
84
|
+
try {
|
|
85
|
+
// Analyze the file
|
|
86
|
+
const analysis = await (0, analyzer_1.analyzeFile)(file);
|
|
87
|
+
// Skip files with no components or functions
|
|
88
|
+
if (analysis.components.length === 0 && analysis.functions.length === 0) {
|
|
89
|
+
console.log(chalk_1.default.gray(`${progress} โญ๏ธ ${relativePath} (no components/functions)`));
|
|
90
|
+
result.skipped++;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// Generate test (or preview in dry-run mode)
|
|
94
|
+
if (dryRun) {
|
|
95
|
+
const testPath = getTestFilePath(file);
|
|
96
|
+
const exists = await fs_extra_1.default.pathExists(testPath);
|
|
97
|
+
console.log(chalk_1.default.blue(`${progress} ๐๏ธ ${relativePath}`) +
|
|
98
|
+
chalk_1.default.gray(` โ ${path_1.default.relative(cwd, testPath)}`) +
|
|
99
|
+
(exists ? chalk_1.default.yellow(' (exists)') : chalk_1.default.green(' (new)')));
|
|
100
|
+
result.files.push({
|
|
101
|
+
code: '',
|
|
102
|
+
outputPath: testPath,
|
|
103
|
+
sourcePath: file,
|
|
104
|
+
action: exists ? 'skipped' : 'created',
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const generatorOptions = {
|
|
109
|
+
snapshot,
|
|
110
|
+
overwrite,
|
|
111
|
+
mock: true,
|
|
112
|
+
};
|
|
113
|
+
const testResult = await (0, generator_1.generateTest)(analysis, generatorOptions);
|
|
114
|
+
result.files.push(testResult);
|
|
115
|
+
const icon = testResult.action === 'created' ? 'โ
' : testResult.action === 'updated' ? '๐' : 'โญ๏ธ';
|
|
116
|
+
const color = testResult.action === 'created' ? chalk_1.default.green : testResult.action === 'updated' ? chalk_1.default.blue : chalk_1.default.gray;
|
|
117
|
+
console.log(color(`${progress} ${icon} ${relativePath}`) +
|
|
118
|
+
chalk_1.default.gray(` โ ${path_1.default.relative(cwd, testResult.outputPath)}`));
|
|
119
|
+
if (testResult.action === 'created')
|
|
120
|
+
result.created++;
|
|
121
|
+
else if (testResult.action === 'updated')
|
|
122
|
+
result.updated++;
|
|
123
|
+
else
|
|
124
|
+
result.skipped++;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
129
|
+
console.log(chalk_1.default.red(`${progress} โ ${relativePath}: ${errorMessage}`));
|
|
130
|
+
result.failed++;
|
|
131
|
+
result.errors.push({ file: relativePath, error: errorMessage });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Summary
|
|
135
|
+
console.log('');
|
|
136
|
+
console.log(chalk_1.default.cyan('โ'.repeat(50)));
|
|
137
|
+
console.log(chalk_1.default.cyan('๐ Summary'));
|
|
138
|
+
console.log(chalk_1.default.cyan('โ'.repeat(50)));
|
|
139
|
+
console.log(` Total files: ${result.total}`);
|
|
140
|
+
console.log(chalk_1.default.green(` Created: ${result.created}`));
|
|
141
|
+
console.log(chalk_1.default.blue(` Updated: ${result.updated}`));
|
|
142
|
+
console.log(chalk_1.default.gray(` Skipped: ${result.skipped}`));
|
|
143
|
+
console.log(chalk_1.default.red(` Failed: ${result.failed}`));
|
|
144
|
+
console.log('');
|
|
145
|
+
if (dryRun) {
|
|
146
|
+
console.log(chalk_1.default.yellow('๐ก This was a dry run. Run without --dry-run to create files.'));
|
|
147
|
+
console.log('');
|
|
148
|
+
}
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get test file path for a source file
|
|
153
|
+
*/
|
|
154
|
+
function getTestFilePath(sourcePath) {
|
|
155
|
+
const ext = path_1.default.extname(sourcePath);
|
|
156
|
+
const baseName = path_1.default.basename(sourcePath, ext);
|
|
157
|
+
const dirName = path_1.default.dirname(sourcePath);
|
|
158
|
+
return path_1.default.join(dirName, `${baseName}.test${ext}`);
|
|
159
|
+
}
|
|
160
|
+
exports.default = scanCommand;
|
|
161
|
+
//# sourceMappingURL=scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED