Learn Ruby logo
Navigation umschalten

Rails Testing - RSpec und Minitest für Qualität

Professionelle Rails-Apps haben umfangreiche Tests.

Test-Typen in Rails

Unit Tests (Models)

Test einzelner Model-Methoden:

describe User do
  it "validates email presence" do
    user = User.new(email: nil)
    expect(user).not_to be_valid
  end
end

Integration/Request Tests

Test gesamte Request-Response Zyklus:

describe "GET /posts" do
  it "returns all posts" do
    post = Post.create!(title: "Test", content: "Content")
    get "/posts"
    expect(response.status).to eq(200)
    expect(response.body).to include(post.title)
  end
end

System Tests

Test wie Benutzer interagiert (mit Browser):

describe "Creating a post", type: :system do
  it "creates a new post" do
    visit "/posts/new"
    fill_in "Title", with: "My Post"
    click_button "Create"
    expect(page).to have_text("Post created")
  end
end

RSpec Setup

gem 'rspec-rails'
gem 'factory_bot_rails'
rails generate rspec:install

Test-Struktur mit RSpec

describe Post do
  describe "validations" do
    it { is_expected.to validate_presence_of(:title) }
  end
  
  describe "#publish" do
    it "changes published status" do
      post = create(:post)
      post.publish
      expect(post).to be_published
    end
  end
end

Factory Bot für Test Data

FactoryBot.define do
  factory :post do
    title { "Test Post" }
    content { "Test content" }
  end
end

Nutzen:

post = create(:post)
posts = create_list(:post, 5)

Mocking und Stubbing

allow(UserMailer).to receive(:deliver_later)

expect_any_instance_of(Post).to receive(:save).and_return(false)

Test Coverage

Gem simplecov zeigt Test Coverage:

# spec/spec_helper.rb
require 'simplecov'
SimpleCov.start

Ziel: 80%+ Code Coverage

Best Practices

  1. TDD (Test-Driven Development): Test zuerst, Code dann
  2. Red-Green-Refactor: Fail → Pass → Improve
  3. DRY: Shared examples für wiederholte Tests
  4. Beschreibend: "it creates a user" statt "it works"

Häufige Fehler

  • ✗ Keine Tests
  • ✗ Zu viele Mocks (Tests werden fragile)
  • ✗ Tests nur für Glücklichfall
  • ✗ Keine Edge Cases

Verwandte Seiten