Skip to content

Commit 14a9a13

Browse files
authored
test: add dev mode test(e2e) (#322)
1 parent 32e266e commit 14a9a13

File tree

39 files changed

+967
-57
lines changed

39 files changed

+967
-57
lines changed

.github/workflows/ci.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,14 @@ jobs:
5050
- name: Build vite-plugin-federation
5151
run: pnpm run build
5252

53-
- name: Test build
54-
run: pnpm run test
53+
- name: Unit test
54+
run: pnpm run 'test:unit'
55+
56+
- name: Dev mode e2e test
57+
run: pnpm run 'test:e2e-dev'
58+
59+
- name: Serve mode e2e test
60+
run: pnpm run 'test:e2e-serve'
5561

5662
lint:
5763
runs-on: ubuntu-latest

.github/workflows/publish.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,14 @@ jobs:
2727
- name: Build
2828
run: pnpm build
2929

30-
- name: Test
31-
run: pnpm test
30+
- name: Unit test
31+
run: pnpm run 'test:unit'
32+
33+
- name: Dev mode e2e test
34+
run: pnpm run 'test:e2e-dev'
35+
36+
- name: Serve mode e2e test
37+
run: pnpm run 'test:e2e-serve'
3238

3339
- name: Create Release for Tag
3440
id: release_tag

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@
1919
"lint": "eslint packages/*/{src,types}/**",
2020
"lint:fix": "eslint --fix",
2121
"build": "cd packages/lib && pnpm build",
22-
"test": "npm-run-all test:unit test:e2e",
22+
"test": "npm-run-all test:unit test:e2e-serve test:e2e-dev",
2323
"test:unit": "vitest run --coverage",
24-
"test:e2e": "vitest run -c vitest.config.e2e.ts"
24+
"test:e2e-serve": "vitest run -c vitest.config.e2e-serve.ts",
25+
"test:e2e-dev": "vitest run -c vitest.config.e2e-dev.ts"
2526
},
2627
"devDependencies": {
2728
"@types/node": "^18.6.4",

packages/examples/testUtils.ts

Lines changed: 0 additions & 4 deletions
This file was deleted.

packages/examples/vitestSetup-dev.ts

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
import { execa } from 'execa';
2+
import { dirname, join, resolve } from 'node:path'
3+
import os from 'node:os'
4+
import fs from 'fs-extra'
5+
import { chromium } from 'playwright-chromium'
6+
import type { Browser, Page } from 'playwright-chromium'
7+
import type { File } from 'vitest'
8+
import { beforeAll, afterAll } from 'vitest'
9+
10+
export const workspaceRoot = resolve(__dirname, '../')
11+
/**
12+
* Path to the test folder
13+
*/
14+
export let testDir: string
15+
16+
export function slash(p: string): string {
17+
return p.replace(/\\/g, '/')
18+
}
19+
20+
export const browserLogs: string[] = []
21+
export const browserErrors: Error[] = []
22+
23+
export let page: Page = undefined!
24+
export let browser: Browser = undefined!
25+
export let viteTestUrl: string = ''
26+
27+
const DIR = join(os.tmpdir(), 'vitest_playwright_global_setup')
28+
29+
let err: Error
30+
let skipError: boolean
31+
32+
beforeAll(async (s) => {
33+
process.env.NODE_ENV = 'production'
34+
const suite = s as File
35+
// skip browser setup for non-examples tests
36+
if (!suite.filepath.includes('examples')) {
37+
return
38+
}
39+
40+
const wsEndpoint = fs.readFileSync(join(DIR, 'wsEndpoint'), 'utf-8')
41+
if (!wsEndpoint) {
42+
throw new Error('wsEndpoint not found')
43+
}
44+
45+
browser = await chromium.connect(wsEndpoint)
46+
page = await browser.newPage()
47+
48+
const globalConsole = global.console
49+
const warn = globalConsole.warn
50+
globalConsole.warn = (msg, ...args) => {
51+
// suppress @vue/reactivity-transform warning
52+
if (msg.includes('@vue/reactivity-transform')) return
53+
warn.call(globalConsole, msg, ...args)
54+
}
55+
56+
skipError = false
57+
try {
58+
page.on('console', (msg) => {
59+
browserLogs.push(msg.text())
60+
})
61+
page.on('pageerror', (error) => {
62+
browserErrors.push(error)
63+
})
64+
65+
const testPath = suite.filepath!
66+
const testName = slash(testPath).match(
67+
/packages\/examples\/([\w-]+)\//
68+
)?.[1]
69+
testDir = dirname(testPath)
70+
71+
72+
// if this is a test placed under examples/xxx/__tests__
73+
// start a vite server in that directory.
74+
if (testName) {
75+
testDir = resolve(workspaceRoot, 'temp', testName)
76+
if (testName === 'vue2-demo') {
77+
await execa('pnpm', ['install'], {
78+
cwd: testDir,
79+
stdio: 'inherit'
80+
})
81+
}
82+
execa('pnpm', ['run', 'dev:hosts'], {cwd: testDir, stdio: 'inherit'})
83+
execa('pnpm', ['run', 'serve:remotes'], {cwd: testDir, stdio: 'inherit'})
84+
await execa('pnpm', ['run', 'build:remotes'], {cwd: testDir, stdio: 'inherit'})
85+
86+
87+
const port = 5000
88+
// use resolved port/base from server
89+
viteTestUrl = `http://localhost:${port}`
90+
await page.goto(viteTestUrl)
91+
}
92+
} catch (e) {
93+
// jest doesn't exit if our setup has error here
94+
// https://github.com/facebook/jest/issues/2713
95+
if (!skipError) {
96+
err = e
97+
}
98+
// Closing the page since an error in the setup, for example a runtime error
99+
// when building the playground should skip further tests.
100+
// If the page remains open, a command like `await page.click(...)` produces
101+
// a timeout with an exception that hides the real error in the console.
102+
await page.close()
103+
}
104+
}, 60000)
105+
106+
afterAll(async () => {
107+
await page?.close()
108+
skipError = true
109+
await execa('pnpm', ['run', 'stop'], { cwd: testDir, stdio: 'inherit' })
110+
if (browser) {
111+
await browser.close()
112+
}
113+
if (err) {
114+
throw err
115+
}
116+
})
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { browserLogs, page } from '~utils'
2+
import { expect, test } from 'vitest'
3+
4+
test('should have no 404s', () => {
5+
browserLogs.forEach((msg) => {
6+
expect(msg).not.toMatch('404')
7+
})
8+
})
9+
10+
test('Reacted Products', async () => {
11+
expect(
12+
await page.textContent('#reco>h3')
13+
).toBe('Related Products')
14+
})
15+
16+
test('buy', async () => {
17+
expect(
18+
await page.textContent('#buy>button')
19+
).toBe(' buy for 66,00 €')
20+
})
21+
22+
test('baskets', async () => {
23+
expect(
24+
await page.textContent('#basket>div')
25+
).toBe("basket: 0 item(s)")
26+
})

packages/examples/vue3-advanced-demo/package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
"build": "pnpm --parallel --filter \"./**\" build ",
1313
"serve": "pnpm --parallel --filter \"./**\" serve ",
1414
"restart": "pnpm stop & pnpm build & pnpm serve",
15-
"stop": "kill-port --port 5001,5002,5003",
15+
"build:remotes": "pnpm --parallel --filter \"./team-blue\" --filter \"./team-green\" build",
16+
"serve:remotes": "pnpm --parallel --filter \"./team-blue\" --filter \"./team-green\" serve",
17+
"dev:hosts": "pnpm --filter \"./team-red\" dev",
18+
"stop": "kill-port --port 5000,5001,5002",
1619
"clean": "pnpm run clean"
1720
},
1821
"devDependencies": {

packages/examples/vue3-advanced-demo/team-green/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
"version": "0.0.0",
55
"type": "module",
66
"scripts": {
7-
"dev": "vite --port 5003 --strictPort",
7+
"dev": "vite --port 5001 --strictPort",
88
"build": "vue-tsc --noEmit && vite build",
9-
"serve": "vite preview --port 5003 --strictPort",
9+
"serve": "vite preview --port 5001 --strictPort",
1010
"clean": "rm -rf dist",
11-
"stop": "kill-port --port 5003"
11+
"stop": "kill-port --port 5001"
1212
},
1313
"dependencies": {
1414
"vue": "^3.2.45",

packages/examples/vue3-advanced-demo/team-red/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
"version": "0.0.0",
55
"type": "module",
66
"scripts": {
7-
"dev": "vite --port 5001 --strictPort",
7+
"dev": "vite --port 5000 --strictPort",
88
"build": "vue-tsc --noEmit && vite build",
9-
"serve": "vite preview --port 5001 --strictPort",
9+
"serve": "vite preview --port 5000 --strictPort",
1010
"clean": "rm -rf dist",
11-
"stop": "kill-port --port 5001"
11+
"stop": "kill-port --port 5000"
1212
},
1313
"dependencies": {
1414
"element-plus": "^2.2.15",

packages/examples/vue3-advanced-demo/team-red/vite.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export default defineConfig({
1212
name: 'team-red',
1313
remotes: {
1414
"team-blue": "http://localhost:5002/assets/remoteEntry.js",
15-
"team-green": "http://localhost:5003/assets/remoteEntry.js",
15+
"team-green": "http://localhost:5001/assets/remoteEntry.js",
1616
},
1717
shared: ['vue','pinia']
1818
})

packages/examples/vue3-demo-esm-shared-store/host/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "@vue3-demo-esm/layout-esm",
2+
"name": "@vue3-demo-esm-shared-store/host",
33
"private": true,
44
"version": "1.0.0",
55
"scripts": {

packages/examples/vue3-demo-esm-shared-store/package.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@
33
"private": true,
44
"version": "1.0.0",
55
"workspaces": [
6-
"home",
7-
"common-lib",
8-
"layout",
9-
"css-modules"
6+
"host",
7+
"remote-A",
8+
"remote-B"
109
],
1110
"scripts": {
1211
"build": "pnpm --parallel --filter \"./**\" build ",
1312
"serve": "pnpm --parallel --filter \"./**\" serve",
13+
"build:remotes": "pnpm --parallel --filter \"./remote-A\" --filter \"./remote-B\" build",
14+
"serve:remotes": "pnpm --parallel --filter \"./remote-A\" --filter \"./remote-B\" serve",
15+
"dev:hosts": "pnpm --filter \"./host\" dev",
1416
"stop": "kill-port --port 5000,5001,5002,5003"
1517
},
1618
"devDependencies": {

packages/examples/vue3-demo-esm-shared-store/remote-A/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "@vue3-demo-esm/home-esm",
2+
"name": "@vue3-demo-esm-shared-store/remote-A",
33
"private": true,
44
"version": "1.0.0",
55
"scripts": {

packages/examples/vue3-demo-esm-shared-store/remote-B/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "@vue3-demo-esm/home-esm",
2+
"name": "@vue3-demo-esm-shared-store/remote-B",
33
"private": true,
44
"version": "1.0.0",
55
"scripts": {

packages/examples/vue3-demo-esm/common-lib/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "@vue3-demo-esm/common-lib-esm",
2+
"name": "@vue3-demo-esm/common-lib",
33
"private": true,
44
"version": "1.0.0",
55
"scripts": {

packages/examples/vue3-demo-esm/css-modules/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "@vue3-demo-esm/css-modules-esm",
2+
"name": "@vue3-demo-esm/css-modules",
33
"private": true,
44
"version": "1.0.0",
55
"scripts": {

packages/examples/vue3-demo-esm/home/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "@vue3-demo-esm/home-esm",
2+
"name": "@vue3-demo-esm/home",
33
"private": true,
44
"version": "1.0.0",
55
"scripts": {

packages/examples/vue3-demo-esm/layout/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "@vue3-demo-esm/layout-esm",
2+
"name": "@vue3-demo-esm/layout",
33
"private": true,
44
"version": "1.0.0",
55
"scripts": {

packages/examples/vue3-demo-esm/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
"scripts": {
1212
"build": "pnpm --parallel --filter \"./**\" build ",
1313
"serve": "pnpm --parallel --filter \"./**\" serve",
14+
"build:remotes": "pnpm --parallel --filter \"./home\" --filter \"./css-modules\" --filter \"./common-lib\" build",
15+
"serve:remotes": "pnpm --parallel --filter \"./home\" --filter \"./css-modules\" --filter \"./common-lib\" serve",
16+
"dev:hosts": "pnpm --filter \"./layout\" dev",
1417
"stop": "kill-port --port 5000,5001,5002,5003"
1518
},
1619
"devDependencies": {

packages/examples/vue3-demo-systemjs/home/vite.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export default defineConfig({
2121
build: {
2222
assetsInlineLimit: 40960,
2323
target: 'esnext',
24-
minify: true,
24+
minify: false,
2525
cssCodeSplit: false,
2626
sourcemap: true,
2727
rollupOptions: {

packages/examples/vue3-demo-systemjs/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
"start": "pnpm start",
1313
"build": "pnpm --parallel --filter \"./**\" build",
1414
"serve": "pnpm --parallel --filter \"./**\" serve",
15+
"build:remotes": "pnpm --parallel --filter \"./home\" --filter \"./css-modules\" --filter \"./common-lib\" build",
16+
"serve:remotes": "pnpm --parallel --filter \"./home\" --filter \"./css-modules\" --filter \"./common-lib\" serve",
17+
"dev:hosts": "pnpm --filter \"./layout\" dev",
1518
"stop": "kill-port --port 5000,5001,5002,5003",
1619
"clean": "rm -rf dist"
1720
},

packages/examples/vue3-demo-webpack-esm-var/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
"scripts": {
55
"build": "pnpm --parallel --filter \"./**\" build ",
66
"serve": "pnpm --parallel --filter \"./**\" serve",
7+
"build:remotes": "pnpm --parallel --filter \"./home\" build",
8+
"serve:remotes": "pnpm --parallel --filter \"./home\" serve",
9+
"dev:hosts": "pnpm --filter \"./layout\" dev",
710
"stop": "kill-port --port 5000,5001"
811
},
912
"workspaces": [

packages/examples/vue3-demo-webpack-systemjs/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
"scripts": {
55
"build": "pnpm --parallel --filter \"./**\" build",
66
"serve": "pnpm --parallel --filter \"./**\" serve ",
7+
"build:remotes": "pnpm --filter \"./home\" build",
8+
"serve:remotes": "pnpm --filter \"./home\" serve",
9+
"dev:hosts": "pnpm --filter \"./layout\" dev",
710
"stop": "kill-port --port 5000,5001"
811
},
912
"workspaces": [

0 commit comments

Comments
 (0)