Package Exports
- @kitiumai/npm-package-tester
- @kitiumai/npm-package-tester/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@kitiumai/npm-package-tester) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
npm-package-tester
๐งช Automatically test npm packages by discovering their CLI commands and running them in isolated Docker environments
๐ค AI-Powered: Generate realistic test scenarios using Claude, GPT-4, Gemini, or Groq ๐ Private Packages: Full support for private npm packages and custom registries โก Fast & Reliable: Run tests in parallel across multiple Node versions
Table of Contents
- The Problem
- The Solution
- Features
- Quick Start
- Example Output
- AI-Powered Testing
- Testing Private Packages
- CLI Options
- How It Works
- Use Cases
- Configuration
- API Usage
- Architecture
- Requirements
- Contributing
- License
The Problem
When you publish an npm package with CLI commands, you need to verify:
- โ Does it install correctly?
- โ Do all CLI commands work?
- โ Does it work across different Node versions?
- โ Does the --help flag work?
- โ Does the --version flag work?
- โ Does it run without crashing?
Manual testing is tedious and error-prone.
The Solution
npm-package-tester
automatically:
- ๐ฆ Analyzes your package.json to detect CLI commands
- ๐ณ Creates fresh Docker containers with specified Node versions
- ๐ฅ Installs your package
- ๐งช Runs each CLI command with common flags (--help, --version, etc.)
- โ Reports which commands work and which don't
Features
- ๐ Auto-Discovery: Automatically detects all CLI commands from
package.json
- ๐ณ Docker Isolation: Tests in clean environments
- ๐ Multi-Version: Test across Node 16, 18, 20, etc.
- โก Parallel Testing: Run tests concurrently for speed
- ๐ Detailed Reports: Clear pass/fail results with complete test breakdown
- ๐ฏ Smart Testing: Automatically tries --help, --version, and no-args
- ๐ค AI-Powered Scenarios: Generate realistic test scenarios using Claude, GPT-4, Gemini, or Groq
- ๐ Private Packages: Full support for private npm packages with authentication
- ๐ฆ Custom Registries: Works with private npm registries
- ๐จ Lightweight: Minimal dependencies, fast execution
Quick Start
# Install globally
npm install -g npm-package-tester
# Test a package from npm
npt test eslint
# Test your local package
npt test ./my-package
# Test across multiple Node versions
npt test prettier --node 16,18,20
# AI-powered intelligent testing (generates realistic scenarios)
npt test env-type-generator --ai-provider anthropic --ai-token YOUR_API_KEY
# Use OpenAI instead
npt test my-package --ai-provider openai --ai-token YOUR_OPENAI_KEY
# Test private packages
npt test @your-org/private-package --npm-token YOUR_NPM_TOKEN
# Test from custom registry
npt test @company/package --npm-registry https://npm.company.com --npm-token YOUR_TOKEN
# Keep containers for debugging
npt test --keep-containers
Example Output
Default Testing
๐ฆ Package: eslint
Version: 8.50.0
๐ณ Node 20
โ eslint --help (125ms)
โ eslint --version (98ms)
โ eslint [no args] (102ms)
๐ Summary
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Total: 3 tests
Passed: 3
Failed: 0
Duration: 325ms
๐ Test Details
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ฏ Default Tests
โ eslint --help (125ms)
โ eslint --version (98ms)
โ eslint (no args) (102ms)
โ
All tests passed!
AI-Powered Testing
๐ฆ Package: env-type-generator
Version: 1.0.0
Auto-generate TypeScript types from .env files with zero config
๐ณ Node 20
โ env-type-gen (1512ms)
โ env-type-gen (4871ms)
โ env-type-gen (1307ms)
๐ Summary
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Total: 3 tests
Passed: 3
Failed: 0
Duration: 7690ms
๐ Test Details
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ค AI-Generated Tests
โ basic-type-generation (1512ms)
โ multiple-env-files-with-parsing -e .env .env.local -p (4871ms)
โ strict-mode-all-required -e .env.example -o ./types/env.d.ts (1307ms)
โ
All tests passed!
How It Works
1. Command Detection
// Reads package.json
{
"name": "my-cli-tool",
"bin": {
"mycli": "./dist/cli.js", // Primary command
"my": "./dist/cli.js" // Alias
}
}
// Detects: mycli, my
2. Docker Environment
# Spins up for each Node version
FROM node:20-alpine
RUN npm install -g my-cli-tool
RUN mycli --help
RUN mycli --version
3. Smart Testing
For each command, automatically tests:
command --help
(should show help)command --version
(should show version)command
(no args - should not crash)- Custom scenarios you define
Use Cases
1. Pre-Publish Validation
# Before publishing
npm run build
npt test .
npm publish
2. CI/CD Integration
# .github/workflows/test.yml
- name: Test CLI
run: |
npm install -g npm-package-tester
npt test . --node 16,18,20
3. Testing Published Packages
# Verify your package works after publishing
npt test your-package-name@latest
4. Debugging Installation Issues
# Keep containers to inspect
npt test . --keep-containers
docker exec -it <container-id> sh
Configuration
Create .npmtestrc.json
:
{
"nodeVersions": ["16", "18", "20"],
"parallel": true,
"timeout": 30000,
"customTests": [
{
"name": "Generate help",
"command": "mycli generate --help",
"expect": {
"exitCode": 0,
"stdout": "Usage:"
}
}
]
}
API Usage
import { testPackage } from 'npm-package-tester';
const results = await testPackage('eslint', {
nodeVersions: ['20'],
parallel: false,
});
console.log(`Passed: ${results.passed}/${results.total}`);
CLI Options
Usage: npt test [options] <package>
Options:
-n, --node <versions> Node versions (comma-separated)
-p, --parallel Run tests in parallel
-k, --keep-containers Keep containers after test
-t, --timeout <ms> Timeout per test (default: 30000)
--npm-token <token> npm authentication token for private packages
--npm-registry <url> Custom npm registry URL
--ai-provider <provider> AI provider (anthropic, openai, google, groq)
--ai-token <token> AI API token/key
--ai-model <model> AI model name (optional, auto-detects best)
--no-help Skip --help tests
--no-version Skip --version tests
-v, --verbose Verbose output
AI-Powered Testing
Instead of just testing --help
and --version
, use AI to generate realistic test scenarios:
npt test env-type-generator --ai-provider anthropic --ai-token YOUR_TOKEN
The AI will:
- ๐ Analyze the package README and CLI help
- ๐ง Understand what the package does
- ๐ฏ Generate realistic test scenarios with:
- Appropriate input files
- Realistic command arguments
- Expected output validation
- โ Validate file creation, content, and exit codes
Example AI-Generated Scenarios:
๐ค Generating test scenarios with AI...
โจ Generated 4 AI test scenarios
๐ณ Node 20
โ basic-env-file-generation (1400ms)
โ env-with-comments (1706ms)
โ nested-env-variables (5040ms)
โ strict-mode-with-custom-output (1517ms)
๐ 4/4 tests passed โ
Supported AI Providers
Provider | Model | Setup |
---|---|---|
Anthropic | Claude Sonnet 4.5 | Get key from console.anthropic.com |
OpenAI | GPT-4o | Get key from platform.openai.com |
Gemini 2.0 Flash | Get key from ai.google.dev | |
Groq | Llama 3.3 70B | Get key from console.groq.com |
The best model for each provider is automatically selected.
Testing Private Packages
npm-package-tester
fully supports private npm packages with authentication:
Using npm Token
# Test private package from npm registry
npt test @your-org/private-package --npm-token YOUR_NPM_TOKEN
# Get your npm token from ~/.npmrc or create one with:
# npm token create --read-only
Using Custom Registry
# Test from private registry (like Verdaccio, Artifactory, GitHub Packages)
npt test @company/package \
--npm-registry https://npm.company.com \
--npm-token YOUR_REGISTRY_TOKEN
How it Works
- The tool creates a
.npmrc
file in the Docker container - Configures authentication with your token
- Installs the package securely
- Runs all tests normally
Security Note: Tokens are only used within isolated Docker containers and are not stored or logged.
Supported Registries
- โ npm (private packages)
- โ GitHub Packages
- โ GitLab Package Registry
- โ Verdaccio
- โ JFrog Artifactory
- โ Azure Artifacts
- โ Any npm-compatible registry
Architecture
npm-package-tester
โโโ PackageAnalyzer # Reads package.json, detects commands
โโโ CommandDetector # Identifies CLI binaries
โโโ DockerManager # Creates/manages containers
โโโ TestRunner # Executes commands in containers
โโโ ScenarioRunner # Runs AI-generated test scenarios
โโโ ScenarioGenerator # Generates scenarios using AI
โโโ AIProvider # Multi-provider AI abstraction (Claude, GPT-4, Gemini, Groq)
โโโ ResultFormatter # Pretty output
โโโ CLI # User interface
Clean Architecture
- Domain: Types, interfaces (no dependencies)
- Application: Business logic (PackageAnalyzer, TestRunner, ScenarioRunner)
- AI: AI providers and scenario generation
- Infrastructure: Docker, file system (external concerns)
- CLI: User interface (commander, chalk)
Requirements
- Docker installed and running
- Node.js >= 16
- npm or yarn
- (Optional) AI provider API key for intelligent test generation
Limitations
- Only tests packages with CLI commands
- Requires Docker (no Windows native support yet)
- Can't test interactive prompts automatically
- Network-dependent (pulls Docker images)
- AI features require API credits
Roadmap
- AI-powered test scenario generation
- Multi-provider AI support (Anthropic, OpenAI, Google, Groq)
- Support testing interactive CLIs
- Cloud runners (no local Docker needed)
- Performance benchmarking
- Screenshot/visual testing for TUI apps
- Windows native support (WSL2)
- Custom Docker images
- CI/CD badges
- Historical test tracking
Contributing
We welcome contributions! Here's how you can help:
Ways to Contribute
- ๐ Report Bugs: Create a bug report
- ๐ก Suggest Features: Request a feature
- ๐ Improve Documentation: Fix typos, add examples, clarify instructions
- ๐งช Add Tests: Increase test coverage
- ๐ง Fix Issues: Check out good first issues
Development Setup
# Clone the repository
git clone https://github.com/kitium-ai/npm-package-tester.git
cd npm-package-tester
# Install dependencies
npm install
# Build the project
npm run build
# Run tests
npm test
# Run linting
npm run lint
Guidelines
- Follow the existing code style
- Write tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
- Keep PRs focused on a single feature or bug fix
Code of Conduct
Be respectful, inclusive, and constructive. We're all here to learn and build great tools together!
License
MIT ยฉ Ashish Yadav
Related Projects
- testcontainers - Integration testing with Docker
- verdaccio - Private npm registry
- np - Better npm publish
Support
- ๐ Documentation
- ๐ฌ GitHub Discussions
- ๐ Issue Tracker
- ๐ง Email
Made with โค๏ธ for npm package authors
โญ Star us on GitHub if you find this useful!