Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/smeijer/where-broke
A CLI utility that helps finding breaking module versions using binary search and automated tests.
https://github.com/smeijer/where-broke
analysis cli nodejs testing
Last synced: 2 months ago
JSON representation
A CLI utility that helps finding breaking module versions using binary search and automated tests.
- Host: GitHub
- URL: https://github.com/smeijer/where-broke
- Owner: smeijer
- License: mit
- Created: 2020-07-03T19:32:30.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2023-05-27T12:22:46.000Z (over 1 year ago)
- Last Synced: 2024-09-14T00:45:17.492Z (4 months ago)
- Topics: analysis, cli, nodejs, testing
- Language: JavaScript
- Homepage:
- Size: 1.21 MB
- Stars: 92
- Watchers: 7
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# where-broke
[![All Contributors](https://img.shields.io/badge/all_contributors-4-orange.svg?style=flat-square)](#contributors-)
**Find the version of a lib that broke your tests**
![animation of where-broke results](./docs/where-broke.gif)
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.
```shell
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:
```js
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('');
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:
```shell
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.
```shell
~/dev/dom-issue
➜ npx where-broke @testing-library/dom
npx: installed 37 in 2.088sCheck 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](https://allcontributors.org/docs/en/emoji-key)):
Stephan Meijer
🤔 💻 🚇 🚧
Michaël De Boey
📖 🚇
Nick McCurdy
🤔
Ian Sutherland
💻
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!