Skip to content

Hunt092/autoTestID

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

20 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

autoTestID

ESLint plugin to enforce data-testid attributes on interactive elements for better testing practices.

Features

  • 🎯 Configurable: Define which elements and custom components require test IDs
  • πŸ”§ Auto-fixable: Automatically suggests and inserts missing test IDs
  • ⚑ Smart suggestions: Generates meaningful test IDs based on context
  • πŸš€ Zero dependencies: Only uses ESLint and Node.js built-ins
  • πŸ“¦ Plug-and-play: Easy to integrate into any React project

Installation

npm install eslint-plugin-autotestid --save-dev

Usage

Basic Setup

// eslint.config.js import testidPlugin from "eslint-plugin-autotestid"; export default [ { plugins: { autotestid: testidPlugin, }, rules: { "autotestid/require-testid": "error", }, }, ];

Using the Recommended Config

// eslint.config.js (flat config) import testidPlugin from "eslint-plugin-autotestid"; export default [ { plugins: { autotestid: testidPlugin }, extends: ["plugin:autotestid/recommended"], }, ];

Advanced Configuration

// eslint.config.js import testidPlugin from "eslint-plugin-autotestid"; export default [ { plugins: { autotestid: testidPlugin, }, rules: { "autotestid/require-testid": [ "error", { // Native HTML elements that require data-testid elements: [ "button", "input", "select", "textarea", "a", "form", "div", ], // Custom React components that require dataTestId prop customComponents: [ "Button", "Card", "SearchBar", "Dialog", "Snackbar", "Dropdown", "Menu", ], // File patterns to exclude exclude: ["**/*.test.jsx", "**/*.spec.jsx", "**/*.stories.jsx"], // Test ID naming pattern pattern: "{page}-{purpose}-{element}", }, ], }, }, ];

Configuration Options

Option Type Default Description
elements string[] ['button', 'input', 'select', 'textarea', 'a', 'form', 'div'] Native HTML elements that require data-testid
customComponents string[] [] Custom React components that require dataTestId prop
exclude string[] [] File patterns to exclude from the rule
pattern string '{page}-{purpose}-{element}' Test ID naming pattern

Test ID Pattern

The plugin generates test IDs using the following pattern:

  • {page} - Extracted from filename (e.g., login-page from LoginPage.jsx)
  • {purpose} - Inferred from props or content (e.g., submit from button text)
  • {element} - Element type (e.g., button, input)

Example: login-submit-button

Examples

Native HTML Elements

// ❌ Missing data-testid <button onClick={handleClick}>Submit</button> // βœ… With data-testid <button data-testid="login-submit-button" onClick={handleClick}>Submit</button>

Custom Components

// ❌ Missing dataTestId prop <Button onClick={handleClick}>Submit</Button> // βœ… With dataTestId prop <Button dataTestId="login-submit-button" onClick={handleClick}>Submit</Button>

Custom Component Implementation Example

// Design system Button component export function Button({ dataTestId, children, ...restProps }) { return ( <button data-testid={dataTestId} {...restProps}> {children} </button> ); } // Usage in app code function LoginForm() { return ( <Button dataTestId="login-submit-button" type="submit">	Submit </Button> ); }

Auto-fix

The plugin can automatically fix missing test IDs:

npx eslint . --fix

Rules

require-testid

Enforces data-testid attributes on interactive elements.

Options:

  • elements (string[]): Native HTML elements to check
  • customComponents (string[]): Custom React components to check
  • exclude (string[]): File patterns to exclude
  • pattern (string): Test ID naming pattern

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

MIT Β© Yash Chavan (Hunt092)

Changelog

1.0.0

  • Initial release
  • Configurable elements and custom components
  • Auto-fix support
  • Smart test ID generation

About

ESLint plugin to enforce data-testid attributes on interactive elements for better testing practices

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published