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 🙏

© 2025 – Pkg Stats / Ryan Hefner

eslint-config-tjw-jest

v3.0.1

Published

The Jared Wilcurt's Jest Linting rules

Readme

eslint-config-tjw-jest

The Jared Wilcurt's Jest/Vitest ESLint rules.

Using this

This assumes you have ESLint 9+ already set up, if not, refer to this guide.

  1. npm install --save-dev eslint eslint-plugin-jest eslint-config-tjw-jest
  2. In your eslint.config.js:
    import pluginJest from 'eslint-plugin-jest';
    import pluginTjwJest from 'eslint-config-tjw-jest';
    
    export default [
      pluginJest.configs['flat/recommended'],
      pluginTjwJest.configs.recommended,
      // Your project rules/settings
      {
        // If you are using Vitest
        languageOptions: {
          globals: {
            vi: true
          }
        },
        rules: {
          // If this is not turned off, linting throws because it can't find 'jest' install
          'jest/no-deprecated-functions': 'off'
        }
      }
    ];

Custom rules

This library contains the following custom rules.

You can set any of these to 'off' instead of the default 'error', to disable them.

Avoid ".toBe()"

Error prevention rule: Enforces using .toEqual instead of the error-proned .toBe assertion.

/* 'jest-tjw/avoid-to-be': 'error' */

describe('Return first player', () => {  
  test('Both players happen to have same name/age', () => {
    const player1 = { name: 'bob', age: 25 };
    const player2 = { name: 'bob', age: 25 };
    const players = [player1, player2];
    const getFirstPlayer = () => {
      return players[0];
    };

    // Good
    expect(getFirstPlayer() === player1)
      .toEqual(true);

    expect(getFirstPlayer() === player2)
      .toEqual(false);

    // Bad
    expect(getFirstPlayer() === player1)
      .toBe(true);

    expect(getFirstPlayer() === player2)
      .toBe(false);
  });
});

Capitalize Test Names

Rule to enforce uppercasing the first character of a test description.

Benefits:

  • Language evolved to use capitalizing the first word in a sentance to give clear visual indication of the start of a new statement. Let's piggy-back on centuries of improving the readability of the English language by enforcing this.
  • Looks better in test runners when a test fails, example:
    • LabDetailsCalendar > Calendar filtering > Selecting a user filters calendar data
/* 'jest-tjw/capitalize-test-names': 'error' */

// Good
test('Renders correctly', () => {...});

// Bad
test('renders correctly', () => {...});

New Line Before Expect Assertion

Rule to enforce return after expect.

Benefit:

  • The assertion is always consistently under the expectation.
  • Visually locating assertions is much easier, and predictable.
/* 'jest-tjw/new-line-before-expect-assertion': 'error' */

// Good
expect(myFunctionCall(with, these, values))
  .toEqual(thisOtherValue);

// Bad
expect(myFunctionCall(with, these, values)).toEqual(thisOtherValue);

Test Names, Avoid "Should"

Rule to enforce writing test names in the style of classic prose using the "active voice".

Most instances of the Passive Voice used in tests starting with "Should" can be automatically fixed. For example, all the following passive voices would become the displayed active voice alternative automatically.

Passive voice | Active voice :-- | :-- Should not have been called | Was not called Should not have errored | Does not error Should not error | Does not error Should be true if clicked | Is true if clicked Should have been called once | Called once Should have exploded | Explodes Should correctly render | Correctly renders Should say x | Displays x Should render correctly | Renders correctly

Benefits:

  • Makes test names unique (they don't all start with the same 5 letters and blend together).
  • Makes test names more direct and concise.
  • It can save lives.
/* 'jest-tjw/test-names-avoid-should': 'error' */

// Good
test('Renders correctly', () => {});

// Bad
test('Should render correctly', () => {});

See also: