Skip to content

ESLint (JS / TS)

eslint-plugin-aaa-pattern impone el patrón Arrange-Act-Assert en archivos de test de JavaScript / TypeScript.

Instalación

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'
    }
  }
]

O usa la config recomendada incluida:

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" }
    }
  ]
}

Regla: aaa/pattern

Opciones

jsonc
{
  "aaa/pattern": ["error", {
    "labels": {
      "arrange": ["arrange"],
      "act":     ["act"],
      "assert":  ["assert"]
    },
    "testFunctions": ["it", "test"],
    "caseSensitive": false,
    "allowEmptySection": true
  }]
}
OpciónPor defectoDescripción
labelsInglés por defectoTextos de comentario aceptados por sección. Es un array, así que admite sinónimos.
testFunctions["it", "test"]Llamadas que definen tests a inspeccionar. Añade "specify", "example" etc. si hace falta.
caseSensitivefalseSi es false, // ARRANGE equivale a arrange.
allowEmptySectiontrueSi es false, reporta cuando una sección no tiene sentencias.

Ejemplos

Given / When / Then

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

Español

jsonc
{
  "labels": {
    "arrange": ["preparar", "preparación"],
    "act":     ["ejecutar"],
    "assert":  ["verificar", "comprobar"]
  }
}

Qué detecta

js
// Error: falta el comentario "arrange"
it('bad', () => {
  // act
  const x = doThing()
  // assert
  expect(x).toBe(1)
})

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

Auto-fix

Cuando los tres comentarios de sección están todos ausentes, eslint --fix inserta una plantilla // arrange / // act / // assert al inicio del bloque de test. Luego solo tienes que mover cada comentario sobre el código que le corresponde.

Otros casos (uno o dos ausentes, orden incorrecto, sección vacía) no se corrigen automáticamente — la posición correcta depende de la intención del test, y el mensaje de error te dice exactamente «qué» añadir y «dónde».