=> {
5 | return value?.subscribe instanceof Function;
6 | };
7 |
8 | export const Undefined = readable(undefined);
9 |
--------------------------------------------------------------------------------
/src/routes/+page.svelte:
--------------------------------------------------------------------------------
1 |
14 |
15 | Welcome to your library project
16 | Create your package using @sveltejs/package and preview/showcase your work with SvelteKit
17 | Visit kit.svelte.dev to read the documentation
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/src/tests/button.svelte:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/tests/interactive-rocket.svelte:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/tests/multiple-rockets.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 | {#each {length: times} as _}
6 | 🚀
7 | {/each}
8 |
--------------------------------------------------------------------------------
/src/tests/render-children.test.ts:
--------------------------------------------------------------------------------
1 | import {createRender} from '$lib/index.js';
2 | import {render, screen} from '@testing-library/svelte';
3 | import Button from './button.svelte';
4 | import Rocket from './rocket.svelte';
5 | import Template from './template.svelte';
6 |
7 | it('renders a component with children', () => {
8 | const config = createRender(Button).slot(createRender(Rocket), 'Fire!');
9 | render(Template, {props: {config}});
10 | expect(screen.getByTestId('button')).toHaveTextContent('🚀Fire!');
11 | });
12 |
--------------------------------------------------------------------------------
/src/tests/render-components.test.ts:
--------------------------------------------------------------------------------
1 | import {createRender} from '$lib/index.js';
2 | import {act, render, screen} from '@testing-library/svelte';
3 | import {writable} from 'svelte/store';
4 | import Rocket from './rocket.svelte';
5 | import MultipleRockets from './multiple-rockets.svelte';
6 | import Template from './template.svelte';
7 |
8 | it('renders a component with no props', () => {
9 | const config = createRender(Rocket);
10 | render(Template, {props: {config}});
11 | expect(screen.getByTestId('template')).toHaveTextContent('🚀');
12 | });
13 |
14 | it('renders a component with static props', () => {
15 | const config = createRender(MultipleRockets, {times: 3});
16 | render(Template, {props: {config}});
17 | expect(screen.getByTestId('template')).toHaveTextContent('🚀🚀🚀');
18 | });
19 |
20 | it('renders a component with reactive props', async () => {
21 | const props = writable({times: 3});
22 | const config = createRender(MultipleRockets, props);
23 | render(Template, {props: {config}});
24 | expect(screen.getByTestId('template')).toHaveTextContent('🚀🚀🚀');
25 | props.set({times: 4});
26 | await act();
27 | expect(screen.getByTestId('template')).toHaveTextContent('🚀🚀🚀🚀');
28 | });
29 |
--------------------------------------------------------------------------------
/src/tests/render-primitives.test.ts:
--------------------------------------------------------------------------------
1 | import {act, render, screen} from '@testing-library/svelte';
2 | import {writable} from 'svelte/store';
3 | import Template from './template.svelte';
4 |
5 | it('renders a static string', () => {
6 | render(Template, {props: {config: 'Ada Lovelace'}});
7 | expect(screen.getByTestId('template')).toHaveTextContent('Ada Lovelace');
8 | });
9 |
10 | it('renders a static number', () => {
11 | render(Template, {props: {config: 1337}});
12 | expect(screen.getByTestId('template')).toHaveTextContent('1337');
13 | });
14 |
15 | it('renders a reactive string', async () => {
16 | const config = writable('Ada Lovelace');
17 | render(Template, {props: {config}});
18 | expect(screen.getByTestId('template')).toHaveTextContent('Ada Lovelace');
19 | config.set('Alan Turing');
20 | await act();
21 | expect(screen.getByTestId('template')).toHaveTextContent('Alan Turing');
22 | });
23 |
24 | it('renders a reactive number', async () => {
25 | const config = writable(1337);
26 | render(Template, {props: {config}});
27 | expect(screen.getByTestId('template')).toHaveTextContent('1337');
28 | config.set(42);
29 | await act();
30 | expect(screen.getByTestId('template')).toHaveTextContent('42');
31 | });
32 |
--------------------------------------------------------------------------------
/src/tests/rocket.svelte:
--------------------------------------------------------------------------------
1 | 🚀
2 |
--------------------------------------------------------------------------------
/src/tests/template.svelte:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/svelte.config.js:
--------------------------------------------------------------------------------
1 | import adapter from '@sveltejs/adapter-auto';
2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
3 |
4 | /** @type {import('@sveltejs/kit').Config} */
5 | const config = {
6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors
7 | // for more information about preprocessors
8 | preprocess: vitePreprocess(),
9 |
10 | kit: {
11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
12 | // If your environment is not supported or you settled on a specific environment, switch out the adapter.
13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters.
14 | adapter: adapter()
15 | }
16 | };
17 |
18 | export default config;
19 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./.svelte-kit/tsconfig.json",
3 | "compilerOptions": {
4 | "allowJs": true,
5 | "checkJs": true,
6 | "esModuleInterop": true,
7 | "forceConsistentCasingInFileNames": true,
8 | "resolveJsonModule": true,
9 | "skipLibCheck": true,
10 | "sourceMap": true,
11 | "strict": true,
12 | "module": "NodeNext",
13 | "moduleResolution": "NodeNext",
14 | "types": ["vitest/globals"],
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import {sveltekit} from '@sveltejs/kit/vite';
2 | import {defineConfig} from 'vitest/config';
3 |
4 | export default defineConfig({
5 | plugins: [sveltekit()],
6 | test: {
7 | globals: true,
8 | environment: 'jsdom',
9 | setupFiles: ['vitest.setup.ts'],
10 | coverage: {reporter: 'lcov'},
11 | },
12 | });
13 |
--------------------------------------------------------------------------------
/vitest.setup.ts:
--------------------------------------------------------------------------------
1 | import '@testing-library/jest-dom/vitest';
2 |
--------------------------------------------------------------------------------