Initial commit
This commit is contained in:
93
skills/testing-next-stack/scripts/generate_test_deps.py
Normal file
93
skills/testing-next-stack/scripts/generate_test_deps.py
Normal file
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate testing dependencies for Next.js projects."""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
|
||||
|
||||
def generate_dependencies(nextjs_version: str, typescript: bool) -> dict:
|
||||
"""Generate package.json dependencies for testing setup."""
|
||||
|
||||
deps = {
|
||||
"devDependencies": {
|
||||
"vitest": "^2.0.0",
|
||||
"@vitejs/plugin-react": "^4.3.0",
|
||||
"@testing-library/react": "^16.0.0",
|
||||
"@testing-library/jest-dom": "^6.5.0",
|
||||
"@testing-library/user-event": "^14.5.0",
|
||||
"jsdom": "^25.0.0",
|
||||
"@playwright/test": "^1.48.0",
|
||||
"@axe-core/playwright": "^4.10.0",
|
||||
"happy-dom": "^15.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
if typescript:
|
||||
deps["devDependencies"]["@types/node"] = "^22.0.0"
|
||||
|
||||
# Add coverage tools
|
||||
deps["devDependencies"]["@vitest/ui"] = "^2.0.0"
|
||||
deps["devDependencies"]["@vitest/coverage-v8"] = "^2.0.0"
|
||||
|
||||
return deps
|
||||
|
||||
|
||||
def generate_scripts() -> dict:
|
||||
"""Generate package.json scripts for testing."""
|
||||
return {
|
||||
"scripts": {
|
||||
"test": "vitest",
|
||||
"test:ui": "vitest --ui",
|
||||
"test:watch": "vitest --watch",
|
||||
"test:coverage": "vitest --coverage",
|
||||
"test:e2e": "playwright test",
|
||||
"test:e2e:ui": "playwright test --ui",
|
||||
"test:e2e:debug": "playwright test --debug",
|
||||
"test:e2e:report": "playwright show-report"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Generate testing dependencies for Next.js projects"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--nextjs-version",
|
||||
default="14",
|
||||
help="Next.js version (default: 14)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--typescript",
|
||||
action="store_true",
|
||||
help="Include TypeScript types"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--output",
|
||||
choices=["json", "install"],
|
||||
default="install",
|
||||
help="Output format (json or install command)"
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
deps = generate_dependencies(args.nextjs_version, args.typescript)
|
||||
scripts = generate_scripts()
|
||||
|
||||
if args.output == "json":
|
||||
output = {**deps, **scripts}
|
||||
print(json.dumps(output, indent=2))
|
||||
else:
|
||||
# Generate install command
|
||||
packages = " ".join(
|
||||
f"{pkg}@{version}"
|
||||
for pkg, version in deps["devDependencies"].items()
|
||||
)
|
||||
print(f"npm install -D {packages}")
|
||||
print("\nAdd these scripts to package.json:")
|
||||
print(json.dumps(scripts, indent=2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user