Skip to content

ESLint (JS / TS) ​

eslint-plugin-aaa-pattern erzwingt das Arrange-Act-Assert-Muster in JavaScript- / TypeScript-Testdateien.

Installation ​

bash
npm install --save-dev eslint-plugin-aaa-pattern

Flat config (ESLint v9+) ​

js
// eslint.config.js
import aaa from 'eslint-plugin-aaa-pattern'

export default [
  {
    files: ['**/*.test.{js,ts}'],
    plugins: { aaa },
    rules: {
      'aaa/pattern': 'error'
    }
  }
]

Oder die mitgelieferte Empfehlung nutzen:

js
import aaa from 'eslint-plugin-aaa-pattern'

export default [aaa.configs.recommended]

Legacy config (ESLint v8) ​

jsonc
// .eslintrc.json
{
  "plugins": ["aaa"],
  "overrides": [
    {
      "files": ["**/*.test.js"],
      "rules": { "aaa/pattern": "error" }
    }
  ]
}

Regel: aaa/pattern ​

Optionen ​

jsonc
{
  "aaa/pattern": ["error", {
    "labels": {
      "arrange": ["arrange"],
      "act":     ["act"],
      "assert":  ["assert"]
    },
    "testFunctions": ["it", "test"],
    "caseSensitive": false,
    "allowEmptySection": true
  }]
}
OptionStandardBeschreibung
labelsEnglische StandardsAkzeptierte Kommentartexte je Sektion. Array, Synonyme möglich.
testFunctions["it", "test"]Test-definierende Aufrufe, die inspiziert werden. Ergänze "specify", "example" etc.
caseSensitivefalseBei false entspricht // ARRANGE dem Wort arrange.
allowEmptySectiontrueBei false wird gemeldet, wenn eine Sektion keine Anweisungen enthält.

Beispiele ​

Given / When / Then ​

jsonc
{
  "labels": {
    "arrange": ["given"],
    "act":     ["when"],
    "assert":  ["then"]
  }
}

Deutsch ​

jsonc
{
  "labels": {
    "arrange": ["vorbereiten", "gegeben"],
    "act":     ["ausführen"],
    "assert":  ["prüfen", "erwarten"]
  }
}

Was erkannt wird ​

js
// Fehler: "arrange"-Kommentar fehlt
it('bad', () => {
  // act
  const x = doThing()
  // assert
  expect(x).toBe(1)
})

// Fehler: falsche Reihenfolge
it('also bad', () => {
  // act
  const x = doThing()
  // arrange
  const y = 1
  // assert
  expect(x).toBe(y)
})

Auto-Fix ​

Wenn alle drei Sektions-Kommentare fehlen, fügt eslint --fix eine // arrange / // act / // assert-Vorlage am Anfang des Testblocks 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 Fehlermeldung sagt dir genau, „was" und „wo" einzufügen ist.