File tree 7 files changed +191
-1
lines changed
dev-packages/e2e-tests/test-applications/webpack-5
7 files changed +191
-1
lines changed Original file line number Diff line number Diff line change @@ -1048,7 +1048,8 @@ jobs:
1048
1048
# TODO(v8): Re-enable hapi tests
1049
1049
# 'node-hapi-app',
1050
1050
' node-exports-test-app' ,
1051
- ' vue-3'
1051
+ ' vue-3' ,
1052
+ ' webpack-5'
1052
1053
]
1053
1054
build-command :
1054
1055
- false
Original file line number Diff line number Diff line change
1
+ @sentry:registry = http://127.0.0.1 :4873
2
+ @sentry-internal:registry = http://127.0.0.1 :4873
Original file line number Diff line number Diff line change
1
+ import * as path from 'path' ;
2
+ import * as url from 'url' ;
3
+ import HtmlWebpackPlugin from 'html-webpack-plugin' ;
4
+ import TerserPlugin from 'terser-webpack-plugin' ;
5
+ import webpack from 'webpack' ;
6
+
7
+ const __dirname = path . dirname ( url . fileURLToPath ( import . meta. url ) ) ;
8
+
9
+ webpack (
10
+ {
11
+ entry : path . join ( __dirname , 'entry.js' ) ,
12
+ output : {
13
+ path : path . join ( __dirname , 'build' ) ,
14
+ filename : 'app.js' ,
15
+ } ,
16
+ optimization : {
17
+ minimize : true ,
18
+ minimizer : [ new TerserPlugin ( ) ] ,
19
+ } ,
20
+ plugins : [ new HtmlWebpackPlugin ( ) , new webpack . EnvironmentPlugin ( [ 'E2E_TEST_DSN' ] ) ] ,
21
+ mode : 'production' ,
22
+ } ,
23
+ ( err , stats ) => {
24
+ if ( err ) {
25
+ console . error ( err . stack || err ) ;
26
+ if ( err . details ) {
27
+ console . error ( err . details ) ;
28
+ }
29
+ return ;
30
+ }
31
+
32
+ const info = stats . toJson ( ) ;
33
+
34
+ if ( stats . hasErrors ( ) ) {
35
+ console . error ( info . errors ) ;
36
+ process . exit ( 1 ) ;
37
+ }
38
+
39
+ if ( stats . hasWarnings ( ) ) {
40
+ console . warn ( info . warnings ) ;
41
+ process . exit ( 1 ) ;
42
+ }
43
+ } ,
44
+ ) ;
Original file line number Diff line number Diff line change
1
+ import { browserTracingIntegration , captureException , init } from '@sentry/browser' ;
2
+
3
+ init ( {
4
+ dsn : process . env . E2E_TEST_DSN ,
5
+ integrations : [ browserTracingIntegration ( ) ] ,
6
+ } ) ;
7
+
8
+ setTimeout ( ( ) => {
9
+ const eventId = captureException ( new Error ( 'I am an error!' ) ) ;
10
+ window . capturedExceptionId = eventId ;
11
+ } , 2000 ) ;
Original file line number Diff line number Diff line change
1
+ {
2
+ "name" : " webpack-5-test" ,
3
+ "version" : " 1.0.0" ,
4
+ "scripts" : {
5
+ "start" : " serve -s build" ,
6
+ "build" : " node build.mjs" ,
7
+ "test:build" : " pnpm install && npx playwright install && pnpm build" ,
8
+ "test:assert" : " playwright test"
9
+ },
10
+ "devDependencies" : {
11
+ "@playwright/test" : " ^1.42.1" ,
12
+ "@sentry/browser" : " latest || *" ,
13
+ "webpack" : " ^5.91.0" ,
14
+ "terser-webpack-plugin" : " ^5.3.10" ,
15
+ "html-webpack-plugin" : " ^5.6.0" ,
16
+ "serve" : " ^14.2.1"
17
+ }
18
+ }
Original file line number Diff line number Diff line change
1
+ import type { PlaywrightTestConfig } from '@playwright/test' ;
2
+ import { devices } from '@playwright/test' ;
3
+
4
+ /**
5
+ * See https://playwright.dev/docs/test-configuration.
6
+ */
7
+ const config : PlaywrightTestConfig = {
8
+ testDir : './tests' ,
9
+ /* Maximum time one test can run for. */
10
+ timeout : 150_000 ,
11
+ expect : {
12
+ /**
13
+ * Maximum time expect() should wait for the condition to be met.
14
+ * For example in `await expect(locator).toHaveText();`
15
+ */
16
+ timeout : 5000 ,
17
+ } ,
18
+ /* Run tests in files in parallel */
19
+ fullyParallel : true ,
20
+ /* Fail the build on CI if you accidentally left test.only in the source code. */
21
+ forbidOnly : ! ! process . env . CI ,
22
+ /* Retry on CI only */
23
+ retries : 0 ,
24
+ /* Opt out of parallel tests on CI. */
25
+ workers : 1 ,
26
+ /* Reporter to use. See https://playwright.dev/docs/test-reporters */
27
+ reporter : 'list' ,
28
+ /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
29
+ use : {
30
+ /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */
31
+ actionTimeout : 0 ,
32
+
33
+ /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
34
+ trace : 'on-first-retry' ,
35
+ } ,
36
+
37
+ /* Configure projects for major browsers */
38
+ projects : [
39
+ {
40
+ name : 'chromium' ,
41
+ use : {
42
+ ...devices [ 'Desktop Chrome' ] ,
43
+ } ,
44
+ } ,
45
+ // For now we only test Chrome!
46
+ // {
47
+ // name: 'firefox',
48
+ // use: {
49
+ // ...devices['Desktop Firefox'],
50
+ // },
51
+ // },
52
+ // {
53
+ // name: 'webkit',
54
+ // use: {
55
+ // ...devices['Desktop Safari'],
56
+ // },
57
+ // },
58
+ ] ,
59
+
60
+ /* Run your local dev server before starting the tests */
61
+ webServer : {
62
+ command : 'pnpm start' ,
63
+ port : 3030 ,
64
+ env : {
65
+ PORT : '3030' ,
66
+ } ,
67
+ } ,
68
+ } ;
69
+
70
+ export default config ;
Original file line number Diff line number Diff line change
1
+ import { expect , test } from '@playwright/test' ;
2
+ import axios , { AxiosError } from 'axios' ;
3
+
4
+ const EVENT_POLLING_TIMEOUT = 90_000 ;
5
+
6
+ const authToken = process . env . E2E_TEST_AUTH_TOKEN ;
7
+ const sentryTestOrgSlug = process . env . E2E_TEST_SENTRY_ORG_SLUG ;
8
+ const sentryTestProject = process . env . E2E_TEST_SENTRY_TEST_PROJECT ;
9
+
10
+ test ( 'Sends an exception to Sentry' , async ( { page } ) => {
11
+ await page . goto ( '/' ) ;
12
+
13
+ const exceptionIdHandle = await page . waitForFunction ( ( ) => window . capturedExceptionId ) ;
14
+ const exceptionEventId = await exceptionIdHandle . jsonValue ( ) ;
15
+
16
+ console . log ( `Polling for error eventId: ${ exceptionEventId } ` ) ;
17
+
18
+ await expect
19
+ . poll (
20
+ async ( ) => {
21
+ try {
22
+ const response = await axios . get (
23
+ `https://sentry.io/api/0/projects/${ sentryTestOrgSlug } /${ sentryTestProject } /events/${ exceptionEventId } /` ,
24
+ { headers : { Authorization : `Bearer ${ authToken } ` } } ,
25
+ ) ;
26
+ return response . status ;
27
+ } catch ( e ) {
28
+ if ( e instanceof AxiosError && e . response ) {
29
+ if ( e . response . status !== 404 ) {
30
+ throw e ;
31
+ } else {
32
+ return e . response . status ;
33
+ }
34
+ } else {
35
+ throw e ;
36
+ }
37
+ }
38
+ } ,
39
+ {
40
+ timeout : EVENT_POLLING_TIMEOUT ,
41
+ } ,
42
+ )
43
+ . toBe ( 200 ) ;
44
+ } ) ;
You can’t perform that action at this time.
0 commit comments