All Projects → smeijer → where-broke

smeijer / where-broke

Licence: MIT License
A CLI utility that helps finding breaking module versions using binary search and automated tests.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to where-broke

unittest expander
A library that provides flexible and easy-to-use tools to parameterize Python unit tests, especially those based on unittest.TestCase.
Stars: ✭ 12 (-86.96%)
Mutual labels:  tests
aqa-tests
Home of test infrastructure for Adoptium builds
Stars: ✭ 104 (+13.04%)
Mutual labels:  tests
web-components-good-practices
😎☑️ Good Practices for build Web Components.
Stars: ✭ 80 (-13.04%)
Mutual labels:  tests
atata-samples
Automation test samples based on Atata Framework
Stars: ✭ 39 (-57.61%)
Mutual labels:  tests
atata-sample-app-tests
Automation tests application based on Atata Framework
Stars: ✭ 27 (-70.65%)
Mutual labels:  tests
CSUS-CPE-CSC-EEE-Materials
Homework, labs, tests for a variety of classes. Feel free to share. California State University, Sacramento
Stars: ✭ 38 (-58.7%)
Mutual labels:  tests
react-ecommerce
E-commerce monorepo application using NextJs, React, React-native, Design-System and Graphql with Typescript
Stars: ✭ 136 (+47.83%)
Mutual labels:  tests
loci
Testing remote CI scripts locally
Stars: ✭ 25 (-72.83%)
Mutual labels:  tests
dojos
Alguns desafios para os participantes dos grupos de estudo
Stars: ✭ 33 (-64.13%)
Mutual labels:  tests
retesteth
testeth via RPC. Test run, generation by t8ntool protocol
Stars: ✭ 56 (-39.13%)
Mutual labels:  tests
types-vs-tests
Tab vs spaces, vim vs emacs, types vs tests, our community is full of these conflicts. In this talk, we'll explore the latter: what is the impact of types in our programs? Can types help write more efficient tests? If so, how?
Stars: ✭ 17 (-81.52%)
Mutual labels:  tests
web-cve-tests
A simple framework for sending test payloads for known web CVEs.
Stars: ✭ 120 (+30.43%)
Mutual labels:  tests
quic-tracker
A test suite for QUIC
Stars: ✭ 59 (-35.87%)
Mutual labels:  tests
regression-testing
Regression testing in Elm!
Stars: ✭ 22 (-76.09%)
Mutual labels:  tests
iiitdmj-gpa
GPA Calculator + Quiz Bot for IIITDM Jabalpur
Stars: ✭ 16 (-82.61%)
Mutual labels:  tests
verification-tests
Blackbox test suite for OpenShift.
Stars: ✭ 41 (-55.43%)
Mutual labels:  tests
textsum examples
[deprecated] reference code for textsum
Stars: ✭ 17 (-81.52%)
Mutual labels:  tests
spectron-typescript-starter
Spectron TypeScript Starter for e2e testing electron applications
Stars: ✭ 15 (-83.7%)
Mutual labels:  tests
estj
EstJ is my own test framework!
Stars: ✭ 13 (-85.87%)
Mutual labels:  tests
balls
the testing framework with balls 🔴🟡🟢
Stars: ✭ 55 (-40.22%)
Mutual labels:  tests

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):


Stephan Meijer

🤔 💻 🚇 🚧

Michaël De Boey

📖 🚇

Nick McCurdy

🤔

Ian Sutherland

💻

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].