implement e2e testing with Maestro and Browserstack#56
Open
achou11 wants to merge 39 commits into
Open
Conversation
still need to wait and poll test run statuses
Browserstack's Maestro support does not seem to support this command (https://www.browserstack.com/docs/app-automate/maestro/references/supported-commands)
gmaclennan
reviewed
May 19, 2026
Member
gmaclennan
left a comment
There was a problem hiding this comment.
Just some minor bugs and nits. I'll push changes for these to re-run CI and check it all works.
| key: nodejs-mobile-${{ env.NODEJS_MOBILE_VERSION }}-ios-${{ hashFiles('scripts/download-nodejs-mobile.sh') }} | ||
|
|
||
| - name: Download nodejs-mobile binaries | ||
| if: steps.cache-libnode.outputs.cache-hit != 'true' |
|
|
||
| concurrency: | ||
| group: ${{ github.workflow }}-${{ github.ref }} | ||
| cancel-in-progress: true |
Member
There was a problem hiding this comment.
This leaves the browserstack build running. I've added a step to the composite action to stop it on cancel.
Comment on lines
+177
to
+178
| # TODO: Enable when we know this job works | ||
| # needs: [build-android, build-ios] |
Member
There was a problem hiding this comment.
I think we need to re-enable this now?
- Set jasmine.DEFAULT_TIMEOUT_INTERVAL to 60s — the 5s default was tripping the CRUD tests that fan out 100 IPC create()/delete() calls on slower BrowserStack devices. - Track every opened project in project-crud and close them in afterEach so listeners don't accumulate across tests (was producing MaxListenersExceededWarning on SocketMessagePort / LocalPeers and slowing later tests). - Add an `all-tests-done` testID alongside `all-tests-passed` / `all-tests-failed` so Maestro can fail fast on a failing run instead of waiting for the full timeout. - Bump Maestro `extendedWaitUntil` to 5 min and assert pass after done. - Log spec start / pass / fail (with stacks) via console.log so they appear under the ReactNativeJS tag in logcat / device logs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The root package.json `prepare` script (`expo-module prepare`, plus `scripts/check-sentry-cocoa-pin.mjs`) needs to run before the e2e app prebuilds, otherwise the module's native scaffolding isn't regenerated and the iOS Pods build fails to resolve `SentrySDK.startTransaction` through the `Sentry/HybridSDK` module. The `iOS Tests` workflow that builds `apps/example` runs `npm install` (no `--ignore-scripts`) and passes — match that. `patch-package` is already wired up as `postinstall` in both package.jsons, so the explicit `npx patch-package` calls are redundant once scripts run. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Introduces e2e test automation using Maestro, configured to run as part of CI.
Current workflow diagram (will update as needed):
Relevant links:
TODO: