Skip to content

Commit 8518798

Browse files
committed
test: add e2e case for conditional exports
1 parent 8b5eed3 commit 8518798

File tree

13 files changed

+89
-6
lines changed

13 files changed

+89
-6
lines changed

.eslintrc.cjs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ module.exports = {
1717
{
1818
files: ['**/e2e/**/*.cy.ts', '**/e2e/cypress/**/*.ts'],
1919
extends: 'plugin:cypress/recommended',
20+
rules: {
21+
'@typescript-eslint/no-namespace': 'off',
22+
},
2023
},
2124
{
2225
files: ['**/tests/**/*.ts', 'tsup.config.ts'],

.github/workflows/e2e.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,15 @@ jobs:
6464
env:
6565
E2E_BASE: ${{ matrix.base }}
6666
E2E_BUNDLER: ${{ matrix.bundler }}
67+
E2E_COMMAND: dev
6768

6869
- name: E2E build
6970
working-directory: ./e2e
7071
run: pnpm e2e:ci:build
7172
env:
7273
E2E_BASE: ${{ matrix.base }}
7374
E2E_BUNDLER: ${{ matrix.bundler }}
75+
E2E_COMMAND: build
7476

7577
e2e-result:
7678
if: ${{ always() }}

e2e/cypress.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ export default defineConfig({
77
},
88
env: {
99
E2E_BASE: process.env.E2E_BASE ?? '/',
10+
E2E_COMMAND: process.env.E2E_COMMAND ?? 'dev',
1011
},
1112
})

e2e/cypress/support/commands.ts

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,34 @@
11
const URL_PREFIX = Cypress.env('E2E_BASE').replace(/\/$/, '')
22

33
// override the default cy.visit command to prepend base
4-
// @ts-expect-error: could not type this method correctly
5-
Cypress.Commands.overwrite('visit', (originalFn, url, options) =>
6-
// @ts-expect-error: could not type this method correctly
7-
originalFn(`${URL_PREFIX}${url}`, options),
4+
Cypress.Commands.overwrite('visit', (originalFn, ...args) => {
5+
// cy.visit(url, options)
6+
if (typeof args[0] === 'string') {
7+
// @ts-expect-error: could not type this correctly
8+
return originalFn(`${URL_PREFIX}${args[0]}`, args[1])
9+
}
10+
11+
// cy.visit(options)
12+
return originalFn({
13+
...args[0],
14+
url: `${URL_PREFIX}${args[0].url}`,
15+
})
16+
})
17+
18+
// add a custom request command to prepend base
19+
Cypress.Commands.add('requestWithBase', (url, options) =>
20+
cy.request(`${URL_PREFIX}${url}`, options),
821
)
22+
23+
declare global {
24+
namespace Cypress {
25+
interface Chainable {
26+
requestWithBase: <T = any>(
27+
url: string,
28+
options?: Partial<Cypress.RequestOptions>,
29+
) => Chainable<Cypress.Response<T>>
30+
}
31+
}
32+
}
33+
34+
export {}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<script setup>
2+
import str from '@vuepress-e2e/conditional-exports'
3+
</script>
4+
5+
{{ str }}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default 'browser-mjs'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = 'node-cjs'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default 'node-mjs'
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"name": "@vuepress-e2e/conditional-exports",
3+
"type": "module",
4+
"exports": {
5+
".": {
6+
"types": "./types.d.ts",
7+
"browser": "./browser.mjs",
8+
"node": "./node.mjs",
9+
"module": "./node.mjs",
10+
"import": "./node.mjs",
11+
"require": "./node.cjs",
12+
"default": "./node.cjs"
13+
},
14+
"./*": "./*"
15+
},
16+
"main": "cjs.js",
17+
"module": "esm.js",
18+
"types": "types.d.ts"
19+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
declare const str: string
2+
export default str

e2e/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,19 @@
44
"private": true,
55
"type": "module",
66
"scripts": {
7-
"e2e:build": "vuepress build docs --clean-cache --clean-temp",
7+
"e2e:build": "E2E_COMMAND=build vuepress build docs --clean-cache --clean-temp",
88
"e2e:build-webpack": "E2E_BUNDLER=webpack pnpm e2e:build",
99
"e2e:ci:build": "pnpm e2e:build && start-server-and-test e2e:serve http-get://localhost:9080 e2e:run",
1010
"e2e:ci:dev": "start-server-and-test e2e:dev http-get://127.0.0.1:9080 e2e:run",
1111
"e2e:clean": "rimraf docs/.vuepress/.temp docs/.vuepress/.cache docs/.vuepress/dist",
12-
"e2e:dev": "vuepress dev docs --clean-cache --clean-temp",
12+
"e2e:dev": "E2E_COMMAND=dev vuepress dev docs --clean-cache --clean-temp",
1313
"e2e:dev-webpack": "E2E_BUNDLER=webpack pnpm e2e:dev",
1414
"e2e:open": "cypress open",
1515
"e2e:run": "cypress run",
1616
"e2e:serve": "anywhere -s -h localhost -p 9080 -d docs/.vuepress/dist"
1717
},
1818
"dependencies": {
19+
"@vuepress-e2e/conditional-exports": "file:./modules/conditional-exports",
1920
"@vuepress/bundler-vite": "workspace:*",
2021
"@vuepress/bundler-webpack": "workspace:*",
2122
"sass": "^1.70.0",
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
it('should support visiting non-ASCII paths directly', () => {
2+
const E2E_COMMAND = Cypress.env('E2E_COMMAND')
3+
4+
cy.visit('/imports/conditional-exports.html')
5+
6+
cy.get('.e2e-theme-content p').should('have.text', 'browser-mjs')
7+
8+
if (E2E_COMMAND === 'build') {
9+
cy.requestWithBase('/imports/conditional-exports.html')
10+
.its('body')
11+
.should('include', '<p>node-mjs</p>')
12+
}
13+
})

pnpm-lock.yaml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)