286 lines
7.7 KiB
Markdown
286 lines
7.7 KiB
Markdown
# Test Infrastructure Complete Setup Guide
|
|
|
|
## 🎯 Overview
|
|
|
|
Your AgMission project now has a complete test infrastructure with:
|
|
- ✅ **Mocha test framework** installed
|
|
- ✅ **Feature-based organization** ready
|
|
- ✅ **61 test files** identified and categorized
|
|
- ✅ **Automated migration script** to organize tests
|
|
- ✅ **npm scripts** for running tests by feature
|
|
- ✅ **Coverage tooling** configured
|
|
|
|
## 📊 Your Test Files (61 total)
|
|
|
|
| Category | Files | Description |
|
|
|----------|-------|-------------|
|
|
| **Promo** | 14 | Promo codes, coupons, validation |
|
|
| **SatLoc** | 13 | SatLoc integration, partner sync |
|
|
| **Job** | 9 | Job processing, matching, verification |
|
|
| **Parsing** | 7 | Log parsing, data processing |
|
|
| **Utils** | 9 | Utilities, helpers, system functions |
|
|
| **Payment** | 4 | Payment processing, subscriptions |
|
|
| **DLQ** | 3 | Dead Letter Queue management |
|
|
| **Integration** | 2 | Full integration tests |
|
|
|
|
## 🚀 Quick Start (3 Steps)
|
|
|
|
### Step 1: Preview Organization
|
|
```bash
|
|
npm run organize-tests:dry-run
|
|
```
|
|
This shows where each file will be moved (no changes made).
|
|
|
|
### Step 2: Execute Organization
|
|
```bash
|
|
npm run organize-tests
|
|
```
|
|
This moves all test files into feature subdirectories:
|
|
```
|
|
tests/
|
|
├── promo/ (14 files)
|
|
├── satloc/ (13 files)
|
|
├── job/ (9 files)
|
|
├── parsing/ (7 files)
|
|
├── utils/ (9 files)
|
|
├── payment/ (4 files)
|
|
├── dlq/ (3 files)
|
|
└── integration/ (2 files)
|
|
```
|
|
|
|
### Step 3: Run Tests by Feature
|
|
```bash
|
|
npm run test:promo # Run all promo tests
|
|
npm run test:satloc # Run all SatLoc tests
|
|
npm run test:job # Run all job tests
|
|
# etc.
|
|
```
|
|
|
|
## 📝 Available Commands
|
|
|
|
### Run by Feature
|
|
```bash
|
|
npm run test:promo # Promo/coupon tests
|
|
npm run test:satloc # SatLoc integration
|
|
npm run test:job # Job processing
|
|
npm run test:payment # Payment tests
|
|
npm run test:dlq # DLQ tests
|
|
npm run test:parsing # Parsing tests
|
|
npm run test:integration # Integration tests
|
|
npm run test:utils # Utility tests
|
|
```
|
|
|
|
### Watch Mode (auto re-run)
|
|
```bash
|
|
npm run test:promo:watch
|
|
npm run test:satloc:watch
|
|
npm run test:job:watch
|
|
```
|
|
|
|
### Run All Tests
|
|
```bash
|
|
npm test # All .spec.js tests
|
|
npm run test:all # ALL test files
|
|
npm run test:coverage # With coverage report
|
|
```
|
|
|
|
### Run Single Test
|
|
```bash
|
|
npm run test:single tests/promo/test_promo_details.js
|
|
node tests/promo/test_promo_details.js
|
|
```
|
|
|
|
## 🔍 How Mocha Handles Failures
|
|
|
|
### ✅ Key Features:
|
|
|
|
1. **Runs ALL tests** (doesn't stop at first failure)
|
|
2. **Clear failure identification**:
|
|
- Numbered list: 1), 2), 3)...
|
|
- Full hierarchy: Suite > Subsuite > Test Name
|
|
- Clickable line numbers to jump to code
|
|
3. **Visual diff** showing expected vs actual
|
|
4. **Exit code** indicates pass/fail (for CI/CD)
|
|
|
|
### Example Output:
|
|
```
|
|
Promo Tests
|
|
✔ should validate coupon code
|
|
✔ should apply discount
|
|
1) should reject expired coupon (FAIL)
|
|
|
|
10 passing (106ms)
|
|
1 failing
|
|
|
|
1) Promo Tests
|
|
should reject expired coupon (FAIL):
|
|
AssertionError: expected true to equal false
|
|
+ expected - actual
|
|
-true
|
|
+false
|
|
at Context.<anonymous> (tests/promo/test_promo_details.js:125:25)
|
|
```
|
|
|
|
**Click the link** `tests/promo/test_promo_details.js:125:25` to jump directly to the failing line!
|
|
|
|
## 📁 What Happens During Organization
|
|
|
|
The `organize_tests.js` script:
|
|
1. **Analyzes** each test file name
|
|
2. **Categorizes** by feature (promo, satloc, job, etc.)
|
|
3. **Creates** subdirectories
|
|
4. **Moves** files to appropriate subdirectory
|
|
5. **Creates** README.md in each subdirectory
|
|
6. **Preserves** original filenames (no breaking changes)
|
|
|
|
### Safety Features:
|
|
- **Dry-run mode** (preview before moving)
|
|
- **Backup option** (`--backup` flag)
|
|
- **Excludes** setup files and helpers
|
|
- **No code changes** (just file moves)
|
|
|
|
## 🎨 Converting to Mocha Format (Optional)
|
|
|
|
You can gradually convert your existing test_*.js files to Mocha format:
|
|
|
|
### Before (current format):
|
|
```javascript
|
|
console.log('Testing feature...');
|
|
const result = doSomething();
|
|
if (result !== expected) {
|
|
console.error('❌ FAILED');
|
|
process.exit(1);
|
|
}
|
|
console.log('✅ PASSED');
|
|
```
|
|
|
|
### After (Mocha format):
|
|
```javascript
|
|
const { expect } = require('chai');
|
|
|
|
describe('Feature Name', () => {
|
|
it('should do something', () => {
|
|
const result = doSomething();
|
|
expect(result).to.equal(expected);
|
|
});
|
|
});
|
|
```
|
|
|
|
**Advantages**:
|
|
- Better error messages
|
|
- Automatic test discovery
|
|
- Built-in assertions with Chai
|
|
- Watch mode support
|
|
- Coverage integration
|
|
|
|
## 📚 Documentation
|
|
|
|
All documentation available in `docs/`:
|
|
- **TESTING_GUIDE.md** - Complete testing guide
|
|
- **TEST_COMMANDS.md** - Quick command reference
|
|
- **TEST_ORGANIZATION.md** - Organization strategies
|
|
|
|
## 🔄 Migration Workflow
|
|
|
|
### Option A: Organize Now
|
|
```bash
|
|
# 1. Preview
|
|
npm run organize-tests:dry-run
|
|
|
|
# 2. Execute (with backup)
|
|
node tests/organize_tests.js --backup
|
|
|
|
# 3. Test it works
|
|
npm run test:promo
|
|
npm run test:satloc
|
|
|
|
# 4. Commit changes
|
|
git add tests/ package.json
|
|
git commit -m "Organize tests by feature"
|
|
```
|
|
|
|
### Option B: Keep Current Structure
|
|
If you prefer NOT to move files, you can still:
|
|
```bash
|
|
# Run all tests
|
|
npm run test:all
|
|
|
|
# Filter by pattern
|
|
npm test -- --grep "promo"
|
|
npm test -- --grep "satloc"
|
|
|
|
# Run specific file
|
|
npm run test:single tests/test_promo_details.js
|
|
```
|
|
|
|
## 🎯 Recommendations
|
|
|
|
1. **Start with organization**: Run `npm run organize-tests` to group by feature
|
|
2. **Test by feature**: Use `npm run test:promo`, `npm run test:satloc`, etc.
|
|
3. **Gradually convert**: Convert test_*.js to *.spec.js with Mocha format over time
|
|
4. **Use watch mode**: `npm run test:promo:watch` during development
|
|
5. **Add coverage**: Run `npm run test:coverage` before commits
|
|
|
|
## ⚠️ Important Notes
|
|
|
|
- **No code changes needed**: Organization just moves files
|
|
- **Original names preserved**: test_*.js names unchanged
|
|
- **Environment auto-loaded**: tests/setup.js handles environment.env
|
|
- **Works with current tests**: No conversion required to use new commands
|
|
- **Gradual migration**: Convert to Mocha format at your own pace
|
|
|
|
## 🤔 FAQ
|
|
|
|
**Q: Will this break my existing test scripts?**
|
|
A: No! Files keep their names, just moved to subdirectories.
|
|
|
|
**Q: Do I have to convert all tests to Mocha format?**
|
|
A: No! Both formats work. Convert gradually as needed.
|
|
|
|
**Q: What if I don't want to organize?**
|
|
A: Keep current structure, use `npm run test:all` and `--grep` filters.
|
|
|
|
**Q: How do I run just one test?**
|
|
A: `npm run test:single tests/promo/test_promo_details.js` (after organization)
|
|
or `node tests/test_promo_details.js` (before organization)
|
|
|
|
**Q: Can I undo the organization?**
|
|
A: Yes! Use `--backup` flag, or just git revert if committed.
|
|
|
|
## 🎉 What You Get
|
|
|
|
### Before:
|
|
```bash
|
|
# Had to run each test individually
|
|
node tests/test_promo_details.js
|
|
node tests/test_satloc_parser.js
|
|
node tests/test_job_matching.js
|
|
# ... 61 files ...
|
|
```
|
|
|
|
### After:
|
|
```bash
|
|
# Run by feature
|
|
npm run test:promo # 14 promo tests
|
|
npm run test:satloc # 13 SatLoc tests
|
|
npm run test:job # 9 job tests
|
|
|
|
# Or run everything
|
|
npm test # All tests, clear failures
|
|
```
|
|
|
|
## 🚀 Next Steps
|
|
|
|
1. ✅ Run `npm run organize-tests:dry-run` to preview
|
|
2. ✅ Run `npm run organize-tests` to organize
|
|
3. ✅ Test with `npm run test:promo` (or any feature)
|
|
4. ✅ Add to your workflow: `npm run test:promo:watch` during dev
|
|
5. ✅ Consider converting a few tests to Mocha format (see TESTING_GUIDE.md)
|
|
|
|
---
|
|
|
|
**Questions? See:**
|
|
- [TESTING_GUIDE.md](TESTING_GUIDE.md) - Full testing guide
|
|
- [TEST_COMMANDS.md](TEST_COMMANDS.md) - Command reference
|
|
- [TEST_ORGANIZATION.md](TEST_ORGANIZATION.md) - Organization details
|