npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

eslint-plugin-data-test

v1.1.2

Published

Enforce data-test attributes on interactive DOM elements and React components

Downloads

294

Readme

eslint-plugin-data-test

Build Status

Enforces that a data-test attribute is present on interactive DOM elements to help with UI testing.

  • <button>Download</button>
  • <button data-test="download-button">Download</button>

Installation

You'll first need to install ESLint, which requires Node.js. Note that eslint-plugin-data-test requires a version of node that supports object spread syntax (>= 5.12.0, but hopefully, no one is using v5 at this point).

$ npm i eslint --save-dev

Next, install eslint-plugin-data-test:

$ npm install eslint-plugin-data-test --save-dev

Note: If you installed ESLint globally (using the -g flag) then you must also install eslint-plugin-data-test globally.

Usage

Add data-test to the plugins section of your .eslintrc configuration file. You can omit the eslint-plugin- prefix:

{
  "plugins": ["data-test"]
}

If you want to use all the recommended default rules, you can simply add this line to the extends section of your .eslintrc configuration:

{
  "extends": ["plugin:data-test/recommended"]
}

By default, this will run all Supported Rules and emit eslint errors.

Another option: you can also selectively enable and disable individual rules in the rules section of your .eslintrc configuration. For instance, if you only want to enable the data-test/button rule, skip the extends addition above and simply add the following to the rules section of your .eslintrc configuration:

{
  "rules": {
    "data-test/button": ["warn", "always"]
  }
}

If you like most of the recommended rules by adding the extends option above, but find one in particular to be bothersome, you can simply disable it:

{
  "rules": {
    "data-test/anchor": "off"
  }
}

Note: see Supported Rules below for a full list.

Custom rule options

All test attributes can be customized individually by passing an object with one or more of the following properties.

domAttribute

The default test attribute expected is data-test for raw dom nodes, but you can override it with whatever you like. Here is how you would use data-test-id instead:

{
  "rules": {
    "data-test/onChange": [
      "error",
      "always",
      { "domAttribute": "data-test-id" }
    ]
  }
}

componentAttribute

Since data-test is not a valid javascript variable name, handling this value at the component level can be a nuisance, so you can speficy a separate attribute name for components that pass a data-test down to an underlying dom node. Note that this is mutually exclusive with domAttribute since you can't render a node that is both a dom node and a component at the same time, nor would you typically apply both attributes to the same node. The default value for this is dataTest, but as with domAttribute, you can customize it to whatever you want. For example:

{
  "rules": {
    "data-test/onChange": [
      "error",
      "always",
      { "componentAttribute": "dataTestId" }
    ]
  }
}

Note that this property can only be set on the handler rules (onClick, onChange, etc.) and not on the element rules (button, anchor, etc.) since those rules only apply to dom elements already.

readonly

By default all inputs with the readonly attribute are ignored, e.g. <input readonly />. If you don't want to ignore this attribute, set readonly to true:

{
  "rules": {
    "data-test/input": ["error", "always", { "readonly": true }]
  }
}

This property is only valid on inputs (since readonly is only valid on inputs).

Ignore

Sometimes when working with third parties or in cases where you're abstracting the data-test attribute into the component definition entirely, you will want to ignore certain kinds of elements and components. You can do this with the ignore parameter:

{
  "rules": {
    "data-test/onChange": [
      "error",
      "always",
      { "ignore": "MyComponent" }
    ]
  }
}

In thie case, any uses of MyComponent will not be tested for data-test properties.

Ignore Pattern

Similar, if you have a whole set of components that match a pattern that you want to ignore, you can provide one or more string regex patterns:

{
  "rules": {
    "data-test/onChange": [
      "error",
      "always",
      { "ignorePattern": ".*Component" }
    ]
  }
}

Supported Rules

Further Reading

If you don't want these test attributes added in production, you can use something like babel-plugin-jsx-remove-data-test-id

Why data attributes and not id or class? Check out some of the following: