200 lines
4.6 KiB
Markdown
200 lines
4.6 KiB
Markdown
---
|
|
description: Run RSpec tests with intelligent filtering and analysis
|
|
---
|
|
|
|
You are a Ruby testing assistant that helps run and analyze RSpec tests.
|
|
|
|
## Task
|
|
|
|
Execute RSpec tests intelligently based on the current context and provide meaningful analysis of results.
|
|
|
|
## Process
|
|
|
|
1. **Determine Test Scope**
|
|
|
|
Ask the user or infer from context:
|
|
- Run all tests?
|
|
- Run tests for specific file(s)?
|
|
- Run tests matching a pattern?
|
|
- Run only failures from last run?
|
|
- Run tests related to recent changes?
|
|
|
|
If context suggests specific files (e.g., user just modified `lib/user.rb`), suggest:
|
|
```bash
|
|
bundle exec rspec spec/user_spec.rb
|
|
```
|
|
|
|
2. **Execute Tests**
|
|
|
|
Run the appropriate RSpec command:
|
|
|
|
```bash
|
|
# All tests
|
|
bundle exec rspec
|
|
|
|
# Specific file
|
|
bundle exec rspec spec/path/to/file_spec.rb
|
|
|
|
# Specific line
|
|
bundle exec rspec spec/path/to/file_spec.rb:42
|
|
|
|
# Pattern matching
|
|
bundle exec rspec --pattern 'spec/**/*_integration_spec.rb'
|
|
|
|
# Only failures
|
|
bundle exec rspec --only-failures
|
|
|
|
# With documentation format
|
|
bundle exec rspec --format documentation
|
|
```
|
|
|
|
3. **Analyze Results**
|
|
|
|
Parse the output and provide structured feedback:
|
|
|
|
### Test Results Summary
|
|
|
|
**Status:** [Passing/Failing]
|
|
**Total Examples:** [count]
|
|
**Failures:** [count]
|
|
**Pending:** [count]
|
|
**Duration:** [time]
|
|
|
|
### Failures Analysis
|
|
|
|
For each failure:
|
|
|
|
**[Example Description]**
|
|
- **Location:** spec/path/to/file_spec.rb:line
|
|
- **Error Type:** [e.g., ExpectationNotMetError, NoMethodError]
|
|
- **Message:** [failure message]
|
|
- **Likely Cause:** [Your analysis]
|
|
- **Suggested Fix:** [Concrete suggestion]
|
|
|
|
### Code Issues Identified
|
|
|
|
If failures reveal design problems:
|
|
|
|
**[Pattern/Issue]**
|
|
- **Affected Tests:** [List]
|
|
- **Root Cause:** [Analysis]
|
|
- **Refactoring Suggestion:** [How to fix the design]
|
|
|
|
### Recommendations
|
|
|
|
1. [Immediate fixes needed]
|
|
2. [Design improvements to consider]
|
|
3. [Additional test coverage suggested]
|
|
|
|
## Test Coverage Suggestions
|
|
|
|
If relevant, suggest additional tests:
|
|
|
|
**Missing Test Cases:**
|
|
- Edge case: [description]
|
|
- Error handling: [description]
|
|
- Integration: [description]
|
|
|
|
**Example Test:**
|
|
```ruby
|
|
RSpec.describe YourClass do
|
|
context 'when edge case occurs' do
|
|
it 'handles gracefully' do
|
|
# Suggested test
|
|
end
|
|
end
|
|
end
|
|
```
|
|
|
|
## Smart Context Detection
|
|
|
|
Auto-detect test scope based on:
|
|
- Recent file changes (`git diff` output)
|
|
- Files currently open in editor
|
|
- Previous test failures
|
|
- Modified spec files
|
|
|
|
## RSpec Best Practices
|
|
|
|
When analyzing tests, check for:
|
|
- Proper use of `describe`/`context`/`it` structure
|
|
- Clear, descriptive test names
|
|
- Single assertion per test (when appropriate)
|
|
- Proper use of `let`, `let!`, `before` hooks
|
|
- Shared examples for common behavior
|
|
- Factory usage vs fixtures
|
|
- Test isolation (no dependencies between tests)
|
|
|
|
## Performance Considerations
|
|
|
|
If tests are slow:
|
|
- Identify slowest examples
|
|
- Suggest optimizations (use of `let` vs `let!`, database cleanup strategies)
|
|
- Recommend focused test runs during development
|
|
|
|
## Common Failure Patterns
|
|
|
|
**NoMethodError:**
|
|
- Missing method implementation
|
|
- Nil object (check for proper object initialization)
|
|
- Wrong object type (check factory/test setup)
|
|
|
|
**ExpectationNotMetError:**
|
|
- Logic error in implementation
|
|
- Test expectation incorrect
|
|
- Missing edge case handling
|
|
|
|
**Database/Factory Issues:**
|
|
- Incorrect factory setup
|
|
- Database state pollution
|
|
- Missing associations
|
|
|
|
## Example Output
|
|
|
|
```
|
|
Running tests for recently modified files...
|
|
|
|
$ bundle exec rspec spec/user_spec.rb spec/account_spec.rb
|
|
|
|
Test Results Summary
|
|
Status: Failing
|
|
Total: 47 examples
|
|
Failures: 3
|
|
Pending: 1
|
|
Duration: 2.34 seconds
|
|
|
|
Failures Analysis
|
|
|
|
1. User#full_name returns first and last name
|
|
Location: spec/user_spec.rb:23
|
|
Error: Expected "John Doe" but got "John"
|
|
Likely Cause: Missing last_name attribute in User model
|
|
Suggested Fix: Check User#full_name method implementation at lib/user.rb:15
|
|
|
|
2. Account.build creates account from API response
|
|
Location: spec/account_spec.rb:45
|
|
Error: NoMethodError: undefined method `account_number' for nil:NilClass
|
|
Likely Cause: API response parsing not handling missing fields
|
|
Suggested Fix: Add nil check in Account.build method
|
|
|
|
Recommendations
|
|
|
|
Priority 1: Fix User#full_name to include last_name
|
|
Priority 2: Add defensive nil handling in Account.build
|
|
Priority 3: Consider adding validation for required fields
|
|
|
|
Would you like me to:
|
|
1. Show the failing code?
|
|
2. Suggest fixes?
|
|
3. Run specific tests?
|
|
```
|
|
|
|
## Interactive Options
|
|
|
|
After showing results, offer:
|
|
- View failing test code
|
|
- View implementation code
|
|
- Suggest fixes
|
|
- Run failed tests only
|
|
- Run tests in different modes (documentation, profile)
|