Skip to content

fix(tests): Use findByRole for async options in opJsonPath.spec.tsx#115645

Merged
ryan953 merged 3 commits into
masterfrom
seer/fix/jest-22p5-opjsonpath-test
May 15, 2026
Merged

fix(tests): Use findByRole for async options in opJsonPath.spec.tsx#115645
ryan953 merged 3 commits into
masterfrom
seer/fix/jest-22p5-opjsonpath-test

Conversation

@sentry
Copy link
Copy Markdown
Contributor

@sentry sentry Bot commented May 15, 2026

This PR addresses JEST-22P5 by updating tests in static/app/views/alerts/rules/uptime/assertions/opJsonPath.spec.tsx.

The root cause was identified as a race condition where screen.getByRole('option', ...) was called immediately after userEvent.click() on a CompositeSelect trigger. The CompositeSelect component, which uses @sentry/scraps and React Aria, renders its options asynchronously. This meant that the options were not always present in the DOM when getByRole was executed, leading to a TestingLibraryElementError.

The fix involves replacing screen.getByRole('option', ...) with await screen.findByRole('option', ...) for the initial lookup of option elements after the dropdown trigger is clicked. findByRole includes built-in waiting and retrying logic, ensuring that the test waits for the asynchronous rendering of the options before attempting to query them, thus eliminating the flakiness.

Legal Boilerplate

Look, I get it. The entity doing business as "Sentry" was incorporated in the State of Delaware in 2015 as Functional Software, Inc. and is gonna need some rights from me in order to utilize my contributions in this here PR. So here's the deal: I retain all rights, title and interest in and to my contributions, and by keeping this boilerplate intact I confirm that Sentry can use, modify, copy, and redistribute my contributions, under Sentry's choice of terms.

Fixes JEST-22P5

@github-actions github-actions Bot added the Scope: Frontend Automatically applied to PRs that change frontend components label May 15, 2026
@ryan953 ryan953 marked this pull request as ready for review May 15, 2026 16:37
@ryan953 ryan953 requested a review from a team as a code owner May 15, 2026 16:37
Copy link
Copy Markdown
Contributor

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit f93845b. Configure here.

Comment thread static/app/views/alerts/rules/uptime/assertions/opJsonPath.spec.tsx
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 15, 2026

📊 Type Coverage Diff

✅ No new type safety issues introduced. Coverage: 93.53%

@ryan953 ryan953 added the Trigger: getsentry tests Once code is reviewed: apply label to PR to trigger getsentry tests label May 15, 2026
… findByRole

The previous fix converted the first getByRole('option', ...) call after
each dropdown click to await screen.findByRole(...), but left the paired
second option query synchronous in four test cases:

- 'shows < and > comparisons as disabled' – greaterThan
- 'enables < and > comparisons for numeric operand' – greaterThan
- 'shows string operand types as disabled' – Literal
- 'shows string operand types as enabled' – Literal

Since CompositeSelect renders options asynchronously, the sibling queries
are subject to the same race condition. Converting all option lookups to
findByRole makes the fix consistent and resilient to future rendering
behaviour changes.

Co-authored-by: Ryan Albrecht <ryan@ryanalbrecht.ca>
@github-actions github-actions Bot removed the Trigger: getsentry tests Once code is reviewed: apply label to PR to trigger getsentry tests label May 15, 2026
@ryan953 ryan953 added the Trigger: getsentry tests Once code is reviewed: apply label to PR to trigger getsentry tests label May 15, 2026
@ryan953 ryan953 enabled auto-merge (squash) May 15, 2026 18:51
@github-actions github-actions Bot removed the Trigger: getsentry tests Once code is reviewed: apply label to PR to trigger getsentry tests label May 15, 2026
@ryan953 ryan953 added the Trigger: getsentry tests Once code is reviewed: apply label to PR to trigger getsentry tests label May 15, 2026
@ryan953 ryan953 merged commit b7f76b9 into master May 15, 2026
88 of 89 checks passed
@ryan953 ryan953 deleted the seer/fix/jest-22p5-opjsonpath-test branch May 15, 2026 21:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Scope: Frontend Automatically applied to PRs that change frontend components Trigger: getsentry tests Once code is reviewed: apply label to PR to trigger getsentry tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants