Skip to content

RuboCop (Ruby) ​

rubocop-aaa ist ein eigener RuboCop-Cop, der das Arrange-Act-Assert-Muster in Ruby-Testcode erzwingt.

Installation ​

ruby
# Gemfile
group :development, :test do
  gem 'rubocop-aaa', require: false
end
bash
bundle install

Cop aktivieren ​

yaml
# .rubocop.yml
require:
  - rubocop-aaa

AAA/Pattern:
  Enabled: true
  Include:
    - 'spec/**/*.rb'
    - 'test/**/*.rb'

Cop: AAA/Pattern ​

Konfiguration ​

yaml
AAA/Pattern:
  TestFunctions:
    - it
    - test
    - specify
    - example
  Labels:
    arrange: [arrange]
    act:     [act]
    assert:  [assert]
  CaseSensitive: false
  AllowEmptySection: true

Beispiele ​

Given / When / Then ​

yaml
AAA/Pattern:
  Labels:
    arrange: [given]
    act:     [when]
    assert:  [then]

Deutsch ​

yaml
AAA/Pattern:
  Labels:
    arrange: [vorbereiten, gegeben]
    act:     [ausführen]
    assert:  [prüfen, erwarten]

Was erkannt wird ​

ruby
# Offense: "arrange" fehlt
it 'bad' do
  # act
  x = do_thing
  # assert
  expect(x).to eq(1)
end

# Offense: falsche Reihenfolge
it 'also bad' do
  # act
  x = do_thing
  # arrange
  y = 1
  # assert
  expect(x).to eq(y)
end

Auto-Korrektur ​

Wenn alle drei Sektions-Kommentare fehlen, fügt rubocop -a (oder --autocorrect) eine # arrange / # act / # assert-Vorlage am Anfang des Blocks ein. Verschiebe danach jeden Kommentar über den Code, zu dem er gehört.

Andere Fälle (einer oder zwei fehlend, falsche Reihenfolge, leere Sektion) werden nicht automatisch korrigiert — die richtige Einfügeposition hängt von der Absicht des Tests ab, und die Offense-Meldung sagt dir genau, „was" und „wo" einzufügen ist.