Claude
Skills
Sign in
Back

ruby-test-analyzer

Included with Lifetime
$97 forever

# Ruby Test Analyzer Skill

Code Reviewscripts

What this skill does

# Ruby Test Analyzer Skill

Intelligently analyze RSpec test failures and provide actionable debugging guidance.

## When to Activate

This skill activates when:
- RSpec tests fail
- User runs test commands
- User asks about test failures or debugging
- Working with test files

## Core Capabilities

### 1. Failure Pattern Recognition

Automatically identify common failure patterns:

**NoMethodError Patterns:**
- Nil object errors → Check object initialization
- Missing method → Check for typos or missing implementation
- Wrong receiver → Check factory setup or test doubles

**Expectation Failures:**
- Off-by-one errors → Check loop boundaries
- Wrong values → Check business logic implementation
- Type mismatches → Check data transformation

**Database/State Issues:**
- Transactional rollback problems
- Factory/fixture conflicts
- Test interdependencies

### 2. Provide Debugging Steps

For each failure, suggest:

1. **Immediate Checks:**
   - Verify object is not nil
   - Check method spelling
   - Confirm proper setup in before blocks

2. **Investigation Steps:**
   - Add `puts` or `binding.pry` at strategic points
   - Check factory definitions
   - Verify database state

3. **Likely Fixes:**
   - Code examples showing the fix
   - References to related files
   - Design improvements to prevent recurrence

### 3. Test Quality Analysis

Evaluate test quality:

**Good Signs:**
- Clear describe/context structure
- Single responsibility per test
- Proper use of let/let!/before
- Descriptive test names
- Good isolation

**Warning Signs:**
- Tests with multiple expectations
- Tests depending on execution order
- Overuse of let! (eager evaluation)
- Brittle tests (too coupled to implementation)
- Missing edge cases

### 4. Suggest Missing Tests

Identify untested scenarios:
- Edge cases
- Error conditions
- Boundary values
- Integration points
- State transitions

## Example Analysis

**Failure Detected:**
```
Failure/Error: expect(user.full_name).to eq("John Doe")
  expected: "John Doe"
       got: "John"
```

**Analysis Response:**

**Failure: User#full_name incomplete**
- **Location:** spec/user_spec.rb:23
- **Error Type:** Expectation mismatch

**Immediate Cause:**
The `full_name` method is only returning the first name.

**Investigation Steps:**
1. Check the implementation at lib/user.rb:15
   ```ruby
   # Current implementation (likely):
   def full_name
     first_name
   end
   ```

2. Verify test data:
   ```ruby
   # Check that your factory/test setup has both names
   user = User.new(first_name: "John", last_name: "Doe")
   ```

**Suggested Fix:**
```ruby
# lib/user.rb:15
def full_name
  [first_name, last_name].compact.join(' ')
end
```

**Additional Considerations:**
- Handle nil values gracefully (using `compact`)
- Consider edge cases: missing last name, middle names
- Add test for user with only first name

**Suggested Additional Tests:**
```ruby
context 'when last_name is missing' do
  it 'returns only first_name' do
    user = User.new(first_name: "John", last_name: nil)
    expect(user.full_name).to eq("John")
  end
end
```

## Performance Analysis

When tests are slow:

**Identify Bottlenecks:**
1. Run with profiling: `bundle exec rspec --profile`
2. Find slowest examples
3. Categorize delays:
   - Database operations
   - External service calls
   - Complex computations
   - Factory creation

**Optimization Suggestions:**

**Database-Heavy Tests:**
- Use `build_stubbed` instead of `create`
- Use `let` instead of `let!` where possible
- Consider using transactions or database_cleaner strategies

**External Services:**
- Stub external API calls
- Use VCR for HTTP interactions
- Mock time-consuming operations

**Factory Optimization:**
- Minimize associated records
- Use traits for specific scenarios
- Consider using `build` instead of `create`

## Interactive Debugging

Offer to:
1. Add debugging output to specific lines
2. Insert `binding.pry` at failure point
3. Show related code context
4. Run specific tests in isolation
5. Check factory definitions
6. Verify test data setup

## Test Coverage Suggestions

Suggest tests for:
- **Happy path**: Normal expected usage
- **Edge cases**: Boundary conditions
- **Error cases**: Invalid inputs
- **Null cases**: Nil/empty values
- **Integration**: Cross-object interactions

## Guidelines

- Focus on actionable next steps
- Provide specific line numbers and file paths
- Show concrete code examples
- Explain the "why" behind failures
- Suggest preventive measures
- Balance speed of fix with quality of solution

Related in Code Review