# Rspec

> RSpec Ruby testing framework. Use for Ruby testing. Use when this capability is needed.

- Skill: `tomevault-io/rspec-2` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/rspec-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/rspec-2/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/rspec-2

---


# RSpec

RSpec is the primary testing tool for Ruby (especially Rails). It focuses on "Behavior Driven Development" (BDD), making tests read like documentation specifications.

## When to Use

- **Ruby/Rails Projects**: The community standard (over Minitest) for complex apps.
- **Documentation**: You want tests that generate readable specs.

## Quick Start

```ruby
# user_spec.rb
RSpec.describe User, type: :model do
  context "when newly created" do
    it "has no name" do
      user = User.new
      expect(user.name).to be_nil
    end
  end
end
```

## Core Concepts

### `describe` vs `context`

- `describe`: Describes the thing being tested (Class, Method).
- `context`: Describes the condition ("when user is logged in").

### Let and Let!

Lazy-loaded variables.

- `let(:user) { User.create }`: Created only when referenced.
- `let!(:user) { User.create }`: Created before each test (eager).

### Matchers

`expect(x).to eq(y)`, `be_valid`, `change { User.count }.by(1)`.

## Best Practices (2025)

**Do**:

- **Use `subject`**: Define the subject of the test explicitly.
- **Keep `it` blocks short**: One expectation per block ideally.
- **Use FactoryBot**: Don't use Fixtures (YAML). Use Factories to build test data.

**Don't**:

- **Don't overuse `before(:all)`**: It introduces shared state between examples. Use `before(:each)` (default).
- **Don't put logic in specs**: Specs should verify behavior, not calculate it.

## References

- [RSpec Documentation](https://rspec.info/)

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/g1joshi) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-15 -->

