3

I have a pre-commit hook set up using jest and the --only-changed flag. However, sometimes my entire test suite will still run (800 tests!) even if I made a change in a single file.

I looked into some other jest flags like

     --lastCommit                  Run all tests affected by file changes in
                                    the last commit made. Behaves similarly to
                                    `--onlyChanged`. 
 

      --findRelatedTests            Find related tests for a list of source
                                    files that were passed in as arguments.
                                    Useful for pre-commit hook integration to
                                    run the minimal amount of tests necessary.

      --changedSince                Runs tests related to the changes since the
                                    provided branch. If the current branch has
                                    diverged from the given branch, then only
                                    changes made locally will be tested. Behaves
                                    similarly to `--onlyChanged`.       [string]

Yet they all have the same problem. When doing some digging, I learned that under the hood "If the found file is a test file, Jest runs it, simple enough. If the found file is a source file, call it found-file.js, then any test files that import found-file.js and the test files that import any of the source files that themselves import found-file.js will be run."

I'm working on a project that's relatively new to me. I'm wondering if it's possible for me to get my pre-commit hook to ONLY run the edited test, not all affected tests, or if there is a way for me to track down this tree of "transitive inverse dependencies" and try to solve the problem with different imports or something.

Here is an example of some output from trying --find-related-tests

Test Suites: 2 failed, 309 passed, 311 total
Tests:       2 failed, 803 passed, 805 total
Snapshots:   308 passed, 308 total
Time:        102.366 s
Ran all test suites related to files matching /\/Users\/me\/repo\/project\/src\/modules\/dogs\/components\/spots\/SpotsSpotter.tsx/i.

> @dogsapp/project@1.0.0 test:staged
> jest --findRelatedTests --passWithNoTests "/Users/me/repo/project/src/modules/dogs/components/spots/SpotsSpotter.tsx"

ERROR: "husky:lint-staged" exited with 1.
husky - pre-commit hook exited with code 1 (error)

It's taking WAY too long when I just made a simple change in one file. Anyone know how I can track down why this is happening?

It seems like something similar was addressed here for the --watch flag: https://www.gitmemory.com/issue/facebook/jest/8276/483695303

stonerose036
  • 241
  • 3
  • 14

0 Answers0