Skip to content

Commit 96ee087

Browse files
Merge pull request #284 from mcous/e2e-svelte-5
test(e2e): add simple Svelte 5 suite
2 parents 240a20c + 01c82c7 commit 96ee087

16 files changed

+373
-14
lines changed

RELEASE.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
1. `pnpm run lint`
44
1. `pnpm run toc`
55
1. `pnpm run setup`
6-
1. `pnpm run validate`
76
1. Raise Version
87
1. `pnpm run build`
98
1. `pnpm run release` or with specific version `npx standard-version --release-as 3.0.0`

e2e/README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,13 @@ test('should show the proper label', () => {
8181
npm run test
8282
```
8383

84+
## Svelte 5 (ESM)
85+
86+
A minimal Svelte 5 test to ensure Svelte 5 components and `.svelte.js` modules work with Jest. No special steps were taken to create this suite. It only contains a few components and their associated tests.
87+
88+
### Run the Svelte 5 tests
89+
90+
```shell
91+
pnpm build
92+
pnpm e2e:svelte-5
93+
```

e2e/svelte-5/.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
shell-emulator=true

e2e/svelte-5/package.json

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"name": "@svelte-jester-e2e/svelte-5",
3+
"version": "1.0.0",
4+
"private": true,
5+
"type": "module",
6+
"scripts": {
7+
"test": "pnpm install && NODE_OPTIONS=\"--experimental-vm-modules --no-warnings\" jest --coverage --no-cache",
8+
"test:watch": "pnpm run test --watch"
9+
},
10+
"devDependencies": {
11+
"@testing-library/jest-dom": "^6.4.5",
12+
"jest": "^29.7.0",
13+
"jest-environment-jsdom": "^29.7.0",
14+
"svelte": "^5.0.0-next.139",
15+
"svelte-jester": "workspace:*"
16+
},
17+
"dependenciesMeta": {
18+
"svelte-jester": {
19+
"injected": true
20+
}
21+
},
22+
"jest": {
23+
"transform": {
24+
"^.+\\.svelte(?:\\.js)?$": [
25+
"svelte-jester"
26+
]
27+
},
28+
"moduleFileExtensions": [
29+
"js",
30+
"svelte"
31+
],
32+
"extensionsToTreatAsEsm": [
33+
".svelte"
34+
],
35+
"setupFilesAfterEnv": [
36+
"@testing-library/jest-dom"
37+
],
38+
"testEnvironment": "jsdom"
39+
}
40+
}

e2e/svelte-5/src/legacy.svelte

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script>
2+
export let name;
3+
let showGreeting = false;
4+
5+
const handleClick = () => (showGreeting = true);
6+
</script>
7+
8+
<button on:click={handleClick}>greet</button>
9+
{#if showGreeting}
10+
<p>hello {name}</p>
11+
{/if}

e2e/svelte-5/src/legacy.test.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { mount, unmount, tick } from 'svelte'
2+
3+
import Subject from './legacy.svelte'
4+
5+
let component
6+
7+
afterEach(() => {
8+
unmount(component)
9+
component = undefined
10+
})
11+
12+
test('render', () => {
13+
component = mount(Subject, {
14+
target: document.body,
15+
props: { name: 'alice' }
16+
})
17+
18+
const button = document.querySelector('button')
19+
20+
expect(button).toHaveRole('button')
21+
})
22+
23+
test('interaction', async () => {
24+
component = mount(Subject, {
25+
target: document.body,
26+
props: { name: 'alice' }
27+
})
28+
29+
const button = document.querySelector('button')
30+
31+
button.click()
32+
await tick()
33+
34+
const message = document.querySelector('p')
35+
36+
expect(message.textContent).toMatch(/hello alice/iu)
37+
})

e2e/svelte-5/src/modern.svelte

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script>
2+
let { name } = $props();
3+
let showGreeting = $state(false);
4+
5+
const handleClick = () => (showGreeting = true);
6+
</script>
7+
8+
<button onclick={handleClick}>greet</button>
9+
{#if showGreeting}
10+
<p>hello {name}</p>
11+
{/if}

e2e/svelte-5/src/modern.test.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { mount, unmount, tick } from 'svelte'
2+
3+
import Subject from './modern.svelte'
4+
5+
let component
6+
7+
afterEach(() => {
8+
unmount(component)
9+
component = undefined
10+
})
11+
12+
test('render', () => {
13+
component = mount(Subject, {
14+
target: document.body,
15+
props: { name: 'alice' }
16+
})
17+
18+
const button = document.querySelector('button')
19+
20+
expect(button).toHaveRole('button')
21+
})
22+
23+
test('interaction', async () => {
24+
component = mount(Subject, {
25+
target: document.body,
26+
props: { name: 'alice' }
27+
})
28+
29+
const button = document.querySelector('button')
30+
31+
button.click()
32+
await tick()
33+
34+
const message = document.querySelector('p')
35+
36+
expect(message.textContent).toMatch(/hello alice/iu)
37+
})

e2e/svelte-5/src/module.svelte.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
export const createCounter = () => {
2+
let count = $state(0)
3+
4+
return {
5+
get count () {
6+
return count
7+
},
8+
9+
increment () {
10+
count = count + 1
11+
}
12+
}
13+
}

e2e/svelte-5/src/module.test.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { test } from '@jest/globals'
2+
3+
// TODO(mcous, 2024-05-23): this import fails
4+
// See https://github.com/svelteness/svelte-jester/pull/283
5+
// import * as Subject from "./module.svelte.js";
6+
const Subject = {}
7+
8+
test.skip('get current count', () => {
9+
const subject = Subject.createCounter()
10+
const result = subject.count
11+
12+
expect(result).toBe(0)
13+
})
14+
15+
test.skip('increment', () => {
16+
const subject = Subject.createCounter()
17+
18+
subject.increment()
19+
const result = subject.count
20+
21+
expect(result).toBe(1)
22+
})

e2e/svelte-5/svelte.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default {}

e2e/svelte/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"build": "rollup -c",
77
"dev": "rollup -c -w",
88
"start": "sirv public --no-clear",
9-
"test": "jest src",
9+
"test": "jest src --no-cache",
1010
"test:watch": "pnpm run test -- --watch"
1111
},
1212
"devDependencies": {

e2e/sveltekit/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"preview": "vite preview",
99
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
1010
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
11-
"test": "svelte-kit sync && cross-env NODE_OPTIONS=--experimental-vm-modules jest src --config jest.config.json",
11+
"test": "svelte-kit sync && cross-env NODE_OPTIONS=--experimental-vm-modules jest src --config jest.config.json --no-cache",
1212
"test:watch": "pnpm run test -- --watch"
1313
},
1414
"devDependencies": {

package.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,15 @@
3737
"test": "pnpm test:esm && pnpm test:cjs",
3838
"test:esm": "pnpm build && cross-env NODE_OPTIONS=--experimental-vm-modules jest src/__tests__/transformer.test.js",
3939
"test:cjs": "pnpm build && jest src/__tests__/transformer.test.cjs",
40-
"e2e": "pnpm e2e:svelte && pnpm e2e:sveltekit",
40+
"e2e": "pnpm e2e:svelte && pnpm e2e:sveltekit && pnpm e2e:svelte-5",
4141
"e2e:svelte": "cd e2e/svelte && pnpm test",
4242
"e2e:sveltekit": "cd e2e/sveltekit && pnpm test",
43+
"e2e:svelte-5": "cd e2e/svelte-5 && pnpm test",
4344
"test:nocache": "pnpm install && jest --clearCache && pnpm test -- --no-cache",
4445
"test:watch": "pnpm test -- --watch",
4546
"test:update": "pnpm test -- --updateSnapshot --coverage",
4647
"setup": "pnpm install && pnpm validate",
47-
"validate": "pnpm lint && pnpm test:nocache",
48+
"validate": "pnpm lint && pnpm test:nocache && pnpm e2e",
4849
"release": "standard-version"
4950
},
5051
"standard-version": {
@@ -78,7 +79,8 @@
7879
"jest",
7980
"it",
8081
"expect",
81-
"describe"
82+
"describe",
83+
"$state"
8284
]
8385
}
8486
}

0 commit comments

Comments
 (0)