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

where-broke

v1.2.0

Published

<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --> [![All Contributors](https://img.shields.io/badge/all_contributors-3-orange.svg?style=flat-square)](#contributors-) <!-- ALL-CONTRIBUTORS-BADGE:END -->

Downloads

29

Readme

where-broke

All Contributors

Find the version of a lib that broke your tests

animation of where-broke results

Most often when there is a regression in a lib that we use, we want to know what the last working version was. This project helps you find that version!

Usage

Run the following command in the root of the the project that contains the breaking test (next to package.json). Replace {lib} with the module name that you wish to bisect.

npx where-broke {lib}

Requirements

To make this work, the project should match the following requirements:

  • there should be a package.json in the project root
  • there should be a test script defined in package.json
  • npm run test returns a non-zero exit code in case of failure
  • npm run test returns a zero exit code in case of success

Example

For example, at a certain moment, @testing-library/dom contained a breaking change that made getByRole('form') fail when the form element didn't have an explicit role defined. To trace this breaking change down, the first thing we need to do is create a reproduction.

For this specific case, the following test would throw on their latest version:

import { getQueriesForElement } from '@testing-library/dom';

function render(html) {
  const container = document.createElement('div');
  container.innerHTML = html;

  return getQueriesForElement(container);
}

test('finds form without role', () => {
  const { getByRole } = render('<form />');
  getByRole('form');
});

To test this, we would make sure that this script is triggered when running npm run test. I used the test method from jest, but any test script that returns a non-zero exit code on fail, works.

Now, instead of npm run test, we run:

npx where-broke @testing-library/dom

This will take some time, as it will run until it finds the breaking version.

But no worries, we're not going to test them all. We use a "binary search" to speed up the process. Basically, we'll cut the apple in halves, until we find the rotten part.

~/dev/dom-issue
➜ npx where-broke @testing-library/dom
npx: installed 37 in 2.088s

Check for regression in @testing-library/dom

ℹ Found 111 versions, will need to test 7 of them

✖ @testing-library/[email protected]
✔ @testing-library/[email protected]
✔ @testing-library/[email protected]
✖ @testing-library/[email protected]
✔ @testing-library/[email protected]
✖ @testing-library/[email protected]
✖ @testing-library/[email protected]

  The tests passed in 6.14.0 and fail since 6.14.1

Now we know, that the breaking change was introduced in 6.14.1. The last version that we can use is 6.14.0, and we can tell the project maintainers that they should look for the cause between 6.14.0 and 6.14.1;

Contributors ✨

Thanks goes to these wonderful people (emoji key):

This project follows the all-contributors specification. Contributions of any kind welcome!