-
-
Notifications
You must be signed in to change notification settings - Fork 9.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Progress reporting for Testing Module #29311
Conversation
☁️ Nx Cloud ReportCI is running/has finished running commands for commit e224aa9. As they complete they will appear below. Click to see the status, the terminal output, and the build insights. 📂 See all runs for this CI Pipeline Execution ✅ Successfully ran 1 targetSent with 💌 from NxCloud. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
13 file(s) reviewed, 9 comment(s)
Edit PR Review Bot Settings
const statusMap: Record<any['status'], API_StatusValue> = { | ||
failed: 'error', | ||
passed: 'success', | ||
pending: 'pending', | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Consider using a more specific type for the status key instead of 'any'
pending: 'pending', | ||
}; | ||
|
||
export function getRelativeTimeString(date: Date): string { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: This function could be moved to a separate utility file for better organization
}); | ||
|
||
title: ({ failed }) => (failed ? "Component tests didn't complete" : 'Component tests'), | ||
description: ({ failed, running, watching, progress }) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: This function is quite long and complex. Consider breaking it down into smaller, more focused functions
return 'Not run'; | ||
}, | ||
|
||
mapStatusUpdate: (state) => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: This complex mapping function could benefit from additional comments explaining its logic
.filter(Boolean) | ||
) | ||
), | ||
} as Addon_TestProviderType<{ testResults: TestResult[] }>); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: The use of 'as' for type assertion should be avoided when possible. Consider using a type guard instead
@@ -24,6 +26,7 @@ const vitestModulePath = join(__dirname, 'node', 'vitest.mjs'); | |||
export const bootTestRunner = async (channel: Channel, initEvent?: string, initArgs?: any[]) => { | |||
let aborted = false; | |||
let child: null | ChildProcess; | |||
let stderr: string[] = []; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Consider initializing stderr as const to prevent accidental reassignment
child.stderr?.on('data', (data) => { | ||
const message = data.toString(); | ||
// TODO: improve this error handling. Example use case is Playwright is not installed | ||
if (message.includes('Error: browserType.launch')) { | ||
channel.emit(TESTING_MODULE_CRASH_REPORT, message); | ||
// Ignore deprecation warnings which appear in yellow ANSI color | ||
if (!data.toString().match(/^\u001B\[33m/)) { | ||
log(data); | ||
stderr.push(data.toString()); | ||
} | ||
|
||
log(data); | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: The stderr handling logic could be moved to a separate function for better readability
} | ||
|
||
log(data); | ||
}); | ||
|
||
child.on('message', (result: any) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Consider using a switch statement for better readability of the message handling logic
const { mapStatusUpdate, ...state } = testProviders[providerId]; | ||
const statusUpdate = mapStatusUpdate?.({ ...state, ...update }); | ||
if (statusUpdate) { | ||
api.experimental_updateStatus(providerId, statusUpdate); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Consider moving this logic to a separate function for better readability
); | ||
|
||
useEffect(() => { | ||
const wrapper = document.getElementById('sidebar-bottom'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we use a const for the id and reuse it in the sidebar for the sidebar-bottom element as well?
I just looked at the code, though. As soon as it is testable, let's thoroughly test the base PR. |
Closes #29262
What I did
Adds progress reporting to addon-test and updates Testing Module to handle progress updates.
Screen.Recording.2024-10-09.at.15.17.59.mov
Checklist for Contributors
Testing
The changes in this PR are covered in the following automated tests:
Manual testing
This section is mandatory for all contributions. If you believe no manual test is necessary, please state so explicitly. Thanks!
Documentation
MIGRATION.MD
Checklist for Maintainers
When this PR is ready for testing, make sure to add
ci:normal
,ci:merged
orci:daily
GH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found incode/lib/cli/src/sandbox-templates.ts
Make sure this PR contains one of the labels below:
Available labels
bug
: Internal changes that fixes incorrect behavior.maintenance
: User-facing maintenance tasks.dependencies
: Upgrading (sometimes downgrading) dependencies.build
: Internal-facing build tooling & test updates. Will not show up in release changelog.cleanup
: Minor cleanup style change. Will not show up in release changelog.documentation
: Documentation only changes. Will not show up in release changelog.feature request
: Introducing a new feature.BREAKING CHANGE
: Changes that break compatibility in some way with current major version.other
: Changes that don't fit in the above categories.🦋 Canary release
This pull request has been released as version
0.0.0-pr-29311-sha-c4d3ed03
. Try it out in a new sandbox by runningnpx [email protected] sandbox
or in an existing project withnpx [email protected] upgrade
.More information
0.0.0-pr-29311-sha-c4d3ed03
ui-testing-progress
c4d3ed03
1728482334
)To request a new release of this pull request, mention the
@storybookjs/core
team.core team members can create a new canary release here or locally with
gh workflow run --repo storybookjs/storybook canary-release-pr.yml --field pr=29311
Greptile Summary
This PR adds progress reporting functionality to the Testing Module in Storybook, enhancing its ability to handle and display test status updates.
TestingModuleProgressReportPayload
type for detailed progress reportingSidebarBottom
andTestingModule
components to handle and display real-time test statusTESTING_MODULE_RUN_PROGRESS_RESPONSE
withTESTING_MODULE_PROGRESS_REPORT
event