Skip to content

feat: Add strackTraceIgnorePatterns option - #16334

Open
guisehn wants to merge 13 commits into
jestjs:mainfrom
guisehn:feat/stack-trace-ignore-patterns
Open

feat: Add strackTraceIgnorePatterns option#16334
guisehn wants to merge 13 commits into
jestjs:mainfrom
guisehn:feat/stack-trace-ignore-patterns

Conversation

@guisehn

@guisehn guisehn commented Aug 13, 2026

Copy link
Copy Markdown

Summary

Implements #16362.

Adds a new strackTraceIgnorePatterns option that allows ignoring noisy lines.

In React tests, it's common to get very noisy stack traces with recursive lib internal calls. Example:

console.error
    An update to ProfileForm inside a test was not wrapped in act(...).

    When testing, code that causes React state updates should be wrapped into act(...):

    act(() => {
      /* fire events that update state */
    });
    /* assert on the output */

    This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act

      at node_modules/react-dom/cjs/react-dom-client.development.js:18758:19
      at runWithFiberInDEV (node_modules/react-dom/cjs/react-dom-client.development.js:874:13)
      at warnIfUpdatesNotWrappedWithActDEV (node_modules/react-dom/cjs/react-dom-client.development.js:18757:9)
      at scheduleUpdateOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:16409:11)
      at dispatchSetStateInternal (node_modules/react-dom/cjs/react-dom-client.development.js:9170:13)
      at dispatchSetState (node_modules/react-dom/cjs/react-dom-client.development.js:9127:7)
      at node_modules/@chakra-ui/react/dist/cjs/media-query/use-media-query.cjs:21:5
      at Object.react_stack_bottom_frame (node_modules/react-dom/cjs/react-dom-client.development.js:25989:20)
      at runWithFiberInDEV (node_modules/react-dom/cjs/react-dom-client.development.js:874:13)
      at commitHookEffectListMount (node_modules/react-dom/cjs/react-dom-client.development.js:13249:29)
      at commitHookPassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:13336:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15484:13)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15476:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)
      at commitPassiveMountOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:15718:11)
      at recursivelyTraversePassiveMountEffects (node_modules/react-dom/cjs/react-dom-client.development.js:15439:11)

With the new option, those stack trace lines can be ignored with the config:

/** @type {import('jest').Config} */
module.exports = {
  stackTraceIgnorePatterns: [
    '/node_modules/react-dom/',
  ],
};

And the resulting stack trace would be:

console.error
    An update to ProfileForm inside a test was not wrapped in act(...).

    When testing, code that causes React state updates should be wrapped into act(...):

    act(() => {
      /* fire events that update state */
    });
    /* assert on the output */

    This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act

      at node_modules/@chakra-ui/react/dist/cjs/media-query/use-media-query.cjs:21:5

Test plan

I added a new e2e test:

yarn jest e2e/__tests__/stackTraceIgnorePatterns.test.ts --no-watchman

 PASS  e2e/__tests__/stackTraceIgnorePatterns.test.ts
  ✓ omits console.error frames matching stackTraceIgnorePatterns (734 ms)
  ✓ keeps helper frames when stackTraceIgnorePatterns is unset (687 ms)

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        1.764 s, estimated 2 s
Ran all test suites matching e2e/__tests__/stackTraceIgnorePatterns.test.ts.

Please let me know if this is enough or if I should provide more test strategies.

@linux-foundation-easycla

linux-foundation-easycla Bot commented Aug 13, 2026

Copy link
Copy Markdown

CLA Not Signed

@netlify

netlify Bot commented Aug 13, 2026

Copy link
Copy Markdown

Deploy Preview for jestjs ready!

Built without sensitive environment variables

Name Link
🔨 Latest commit a0432dd
🔍 Latest deploy log https://app.netlify.com/projects/jestjs/deploys/6a833c2ba7da4400088a8e51
😎 Deploy Preview https://deploy-preview-16334--jestjs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions github-actions Bot added the require-changelog If a PR does requires a changelog entry label Aug 13, 2026
@pkg-pr-new

pkg-pr-new Bot commented Aug 13, 2026

Copy link
Copy Markdown

Open in StackBlitz

babel-jest

npm i https://pkg.pr.new/babel-jest@16334

babel-plugin-jest-hoist

npm i https://pkg.pr.new/babel-plugin-jest-hoist@16334

babel-preset-jest

npm i https://pkg.pr.new/babel-preset-jest@16334

create-jest

npm i https://pkg.pr.new/create-jest@16334

@jest/diff-sequences

npm i https://pkg.pr.new/@jest/diff-sequences@16334

expect

npm i https://pkg.pr.new/expect@16334

@jest/expect-utils

npm i https://pkg.pr.new/@jest/expect-utils@16334

jest

npm i https://pkg.pr.new/jest@16334

jest-changed-files

npm i https://pkg.pr.new/jest-changed-files@16334

jest-circus

npm i https://pkg.pr.new/jest-circus@16334

jest-cli

npm i https://pkg.pr.new/jest-cli@16334

jest-config

npm i https://pkg.pr.new/jest-config@16334

@jest/console

npm i https://pkg.pr.new/@jest/console@16334

@jest/core

npm i https://pkg.pr.new/@jest/core@16334

@jest/create-cache-key-function

npm i https://pkg.pr.new/@jest/create-cache-key-function@16334

jest-diff

npm i https://pkg.pr.new/jest-diff@16334

jest-docblock

npm i https://pkg.pr.new/jest-docblock@16334

jest-each

npm i https://pkg.pr.new/jest-each@16334

@jest/environment

npm i https://pkg.pr.new/@jest/environment@16334

jest-environment-jsdom

npm i https://pkg.pr.new/jest-environment-jsdom@16334

@jest/environment-jsdom-abstract

npm i https://pkg.pr.new/@jest/environment-jsdom-abstract@16334

jest-environment-node

npm i https://pkg.pr.new/jest-environment-node@16334

@jest/expect

npm i https://pkg.pr.new/@jest/expect@16334

@jest/fake-timers

npm i https://pkg.pr.new/@jest/fake-timers@16334

@jest/get-type

npm i https://pkg.pr.new/@jest/get-type@16334

@jest/globals

npm i https://pkg.pr.new/@jest/globals@16334

jest-haste-map

npm i https://pkg.pr.new/jest-haste-map@16334

jest-jasmine2

npm i https://pkg.pr.new/jest-jasmine2@16334

jest-leak-detector

npm i https://pkg.pr.new/jest-leak-detector@16334

jest-matcher-utils

npm i https://pkg.pr.new/jest-matcher-utils@16334

jest-message-util

npm i https://pkg.pr.new/jest-message-util@16334

jest-mock

npm i https://pkg.pr.new/jest-mock@16334

@jest/pattern

npm i https://pkg.pr.new/@jest/pattern@16334

jest-phabricator

npm i https://pkg.pr.new/jest-phabricator@16334

jest-regex-util

npm i https://pkg.pr.new/jest-regex-util@16334

@jest/reporters

npm i https://pkg.pr.new/@jest/reporters@16334

jest-resolve

npm i https://pkg.pr.new/jest-resolve@16334

jest-resolve-dependencies

npm i https://pkg.pr.new/jest-resolve-dependencies@16334

jest-runner

npm i https://pkg.pr.new/jest-runner@16334

jest-runtime

npm i https://pkg.pr.new/jest-runtime@16334

@jest/schemas

npm i https://pkg.pr.new/@jest/schemas@16334

jest-snapshot

npm i https://pkg.pr.new/jest-snapshot@16334

@jest/snapshot-utils

npm i https://pkg.pr.new/@jest/snapshot-utils@16334

@jest/source-map

npm i https://pkg.pr.new/@jest/source-map@16334

@jest/test-result

npm i https://pkg.pr.new/@jest/test-result@16334

@jest/test-sequencer

npm i https://pkg.pr.new/@jest/test-sequencer@16334

@jest/transform

npm i https://pkg.pr.new/@jest/transform@16334

@jest/types

npm i https://pkg.pr.new/@jest/types@16334

jest-util

npm i https://pkg.pr.new/jest-util@16334

jest-validate

npm i https://pkg.pr.new/jest-validate@16334

jest-watcher

npm i https://pkg.pr.new/jest-watcher@16334

jest-worker

npm i https://pkg.pr.new/jest-worker@16334

pretty-format

npm i https://pkg.pr.new/pretty-format@16334

commit: a0432dd

@guisehn
guisehn marked this pull request as ready for review August 13, 2026 18:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

require-changelog If a PR does requires a changelog entry

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant