Skip to content

Commit fd20736

Browse files
committed
Add imagetools tests
1 parent 8638a60 commit fd20736

File tree

4 files changed

+67
-5
lines changed

4 files changed

+67
-5
lines changed

playwright.config.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1+
import detect from 'is-port-reachable'
2+
3+
const reuseExistingServer = await detect(5173, { host: 'localhost' })
4+
15
/** @type {import('@playwright/test').PlaywrightTestConfig} */
26
const config = {
37
webServer: {
4-
command: 'npm run build && npm run preview',
5-
port: 4173
8+
command: 'npm run dev',
9+
port: 5173,
10+
reuseExistingServer
611
},
712
testDir: 'tests'
813
}

src/routes/test/+page.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const prerender = false

src/routes/test/+page.svelte

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<script>
2+
import testBasic from '../cat01.jpg?run'
3+
import testNoLqip from '../cat01.jpg?lqip=0&run'
4+
import testWidthOverride from '../cat01.jpg?width=480;1024&run'
5+
6+
const s = (obj = {}) => JSON.stringify(obj)
7+
8+
const tests = [
9+
{ id: 'basic', name: 'default variants are generated', view: s(testBasic) },
10+
{ id: 'nolqip', name: 'no lqip', view: s(testNoLqip) },
11+
{ id: 'width', name: 'width override', view: s(testWidthOverride) }
12+
]
13+
</script>
14+
15+
<svelte:head>
16+
<meta name="robots" content="noindex" />
17+
</svelte:head>
18+
19+
<div class="prose container mx-auto">
20+
<h1>Tests</h1>
21+
<section>
22+
<h2>Imagetools</h2>
23+
<ol>
24+
{#each tests as { id, name, view }}
25+
<li>
26+
{name}
27+
<pre><code data-testid={id} class="whitespace-normal">{@html view}</code></pre>
28+
</li>
29+
{/each}
30+
</ol>
31+
</section>
32+
</div>

tests/test.js

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,30 @@
11
import { expect, test } from '@playwright/test'
22

3-
test('index page has expected h1', async ({ page }) => {
4-
await page.goto('/')
5-
expect(await page.textContent('h1')).toBe('Welcome to SvelteKit')
3+
test('default variants are generated', async ({ page }) => {
4+
await page.goto('/test')
5+
const data = JSON.parse((await page.getByTestId('basic').textContent()) || '')
6+
expect(data.length).toBe(10)
7+
expect(data.filter((i) => i.format === 'jpg').length).toBe(3)
8+
expect(data.filter((i) => i.format === 'avif').length).toBe(3)
9+
expect(data.filter((i) => i.format === 'webp').length).toBe(4)
10+
expect(data.filter((i) => i.width === 480).length).toBe(3)
11+
expect(data.filter((i) => i.width === 1024).length).toBe(3)
12+
expect(data.filter((i) => i.width === 1920).length).toBe(3)
13+
const { base64 } = data.find((i) => i.format === 'webp' && i.width === 16)
14+
expect(base64).toContain('data:image/webp;base64')
15+
})
16+
17+
test('no lqip', async ({ page }) => {
18+
await page.goto('/test')
19+
const data = JSON.parse((await page.getByTestId('nolqip').textContent()) || '')
20+
expect(data.length).toBe(9)
21+
expect(data.find((/** @type {{ base64: any; }} */ i) => i.base64)).toBe(undefined)
22+
})
23+
24+
test('width override', async ({ page }) => {
25+
await page.goto('/test')
26+
const data = JSON.parse((await page.getByTestId('width').textContent()) || '')
27+
expect(data.length).toBe(7)
28+
expect(data.filter((i) => i.width === 480).length).toBe(3)
29+
expect(data.filter((i) => i.width === 1024).length).toBe(3)
630
})

0 commit comments

Comments
 (0)