diff --git a/.changeset/fiery-kiwis-dance.md b/.changeset/fiery-kiwis-dance.md new file mode 100644 index 000000000..06538b2d6 --- /dev/null +++ b/.changeset/fiery-kiwis-dance.md @@ -0,0 +1,5 @@ +--- +'sv': patch +--- + +feat(vitest): better real world vitest examples diff --git a/packages/sv/src/addons/vitest-addon.ts b/packages/sv/src/addons/vitest-addon.ts index 8ff966180..1b33420d9 100644 --- a/packages/sv/src/addons/vitest-addon.ts +++ b/packages/sv/src/addons/vitest-addon.ts @@ -50,16 +50,32 @@ export default defineAddon({ return generateCode(); }); + const examplesDir = (kit ? kit.libDirectory : 'src/lib') + '/vitest-examples'; + const typed = language === 'ts'; + + if (unitTesting || componentTesting) { + sv.file(`${examplesDir}/greet.${language}`, (content) => { + if (content) return content; + + return dedent` + export function greet(${typed ? 'name: string' : 'name'})${typed ? ': string' : ''} { + return 'Hello, ' + name + '!'; + } + `; + }); + } + if (unitTesting) { - sv.file(`src/demo.spec.${language}`, (content) => { + sv.file(`${examplesDir}/greet.spec.${language}`, (content) => { if (content) return content; return dedent` import { describe, it, expect } from 'vitest'; - - describe('sum test', () => { - it('adds 1 + 2 to equal 3', () => { - expect(1 + 2).toBe(3); + import { greet } from './greet'; + + describe('greet', () => { + it('returns a greeting', () => { + expect(greet('Svelte')).toBe('Hello, Svelte!'); }); }); `; @@ -67,28 +83,39 @@ export default defineAddon({ } if (componentTesting) { - const fileName = kit - ? `${kit.routesDirectory}/page.svelte.spec.${language}` - : `src/App.svelte.test.${language}`; + sv.file(`${examplesDir}/Welcome.svelte`, (content) => { + if (content) return content; - sv.file(fileName, (content) => { + return dedent` + + +

{greet(host)}

+

{greet(guest)}

+ `; + }); + + sv.file(`${examplesDir}/Welcome.svelte.spec.${language}`, (content) => { if (content) return content; return dedent` - import { page } from 'vitest/browser'; - import { describe, expect, it } from 'vitest'; - import { render } from 'vitest-browser-svelte'; - ${kit ? "import Page from './+page.svelte';" : "import App from './App.svelte';"} - - describe('${kit ? '/+page.svelte' : 'App.svelte'}', () => { - it('should render h1', async () => { - render(${kit ? 'Page' : 'App'}); - - const heading = page.getByRole('heading', { level: 1 }); - await expect.element(heading).toBeInTheDocument(); - }); + import { page } from 'vitest/browser'; + import { describe, expect, it } from 'vitest'; + import { render } from 'vitest-browser-svelte'; + import Welcome from './Welcome.svelte'; + + describe('Welcome.svelte', () => { + it('renders greetings for host and guest', async () => { + render(Welcome, { host: 'SvelteKit', guest: 'Vitest' }); + + await expect.element(page.getByRole('heading', { level: 1 })).toHaveTextContent('Hello, SvelteKit!'); + await expect.element(page.getByText('Hello, Vitest!')).toBeInTheDocument(); }); - `; + }); + `; }); } diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/demo.spec.ts b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/demo.spec.ts deleted file mode 100644 index e07cbbd72..000000000 --- a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/demo.spec.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { describe, it, expect } from 'vitest'; - -describe('sum test', () => { - it('adds 1 + 2 to equal 3', () => { - expect(1 + 2).toBe(3); - }); -}); diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/lib/vitest-examples/Welcome.svelte b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/lib/vitest-examples/Welcome.svelte new file mode 100644 index 000000000..c7b846031 --- /dev/null +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/lib/vitest-examples/Welcome.svelte @@ -0,0 +1,8 @@ + + +

{greet(host)}

+

{greet(guest)}

diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/lib/vitest-examples/Welcome.svelte.spec.ts b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/lib/vitest-examples/Welcome.svelte.spec.ts new file mode 100644 index 000000000..4c9a61be3 --- /dev/null +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/lib/vitest-examples/Welcome.svelte.spec.ts @@ -0,0 +1,13 @@ +import { page } from 'vitest/browser'; +import { describe, expect, it } from 'vitest'; +import { render } from 'vitest-browser-svelte'; +import Welcome from './Welcome.svelte'; + +describe('Welcome.svelte', () => { + it('renders greetings for host and guest', async () => { + render(Welcome, { host: 'SvelteKit', guest: 'Vitest' }); + + await expect.element(page.getByRole('heading', { level: 1 })).toHaveTextContent('Hello, SvelteKit!'); + await expect.element(page.getByText('Hello, Vitest!')).toBeInTheDocument(); + }); +}); diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/lib/vitest-examples/greet.spec.ts b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/lib/vitest-examples/greet.spec.ts new file mode 100644 index 000000000..f2d6b1263 --- /dev/null +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/lib/vitest-examples/greet.spec.ts @@ -0,0 +1,8 @@ +import { describe, it, expect } from 'vitest'; +import { greet } from './greet'; + +describe('greet', () => { + it('returns a greeting', () => { + expect(greet('Svelte')).toBe('Hello, Svelte!'); + }); +}); diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/lib/vitest-examples/greet.ts b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/lib/vitest-examples/greet.ts new file mode 100644 index 000000000..304b4823e --- /dev/null +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/lib/vitest-examples/greet.ts @@ -0,0 +1,3 @@ +export function greet(name: string): string { + return 'Hello, ' + name + '!'; +} diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/routes/page.svelte.spec.ts b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/routes/page.svelte.spec.ts deleted file mode 100644 index 9b564bba4..000000000 --- a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/routes/page.svelte.spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { page } from 'vitest/browser'; -import { describe, expect, it } from 'vitest'; -import { render } from 'vitest-browser-svelte'; -import Page from './+page.svelte'; - -describe('/+page.svelte', () => { - it('should render h1', async () => { - render(Page); - - const heading = page.getByRole('heading', { level: 1 }); - await expect.element(heading).toBeInTheDocument(); - }); -});