Files
2025-11-30 08:30:07 +08:00

4.6 KiB

description
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:

bundle exec rspec spec/user_spec.rb
  1. Execute Tests

Run the appropriate RSpec command:

# 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
  1. 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:

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)