Add initial test scaffolding

This commit is contained in:
Ryan Gossiaux
2021-12-25 01:18:07 -08:00
parent ef5960377d
commit 740d91ab06
2 changed files with 48 additions and 1 deletions

View File

@@ -1,8 +1,12 @@
module.exports = {
transform: {
'^.+\\.svelte$': 'svelte-jester',
'^.+\\.svelte$': ['svelte-jester', { preprocess: true }],
'^.+\\.js$': 'babel-jest',
'^.+\\.ts$': 'ts-jest',
},
testEnvironment: "jsdom",
moduleFileExtensions: ['js', 'ts', 'svelte'],
moduleNameMapper: {
"\\$lib/(.+)$": "<rootDir>/src/lib/$1",
},
}

View File

@@ -0,0 +1,43 @@
<script lang="ts" context="module">
type HandlerType = (event?: CustomEvent) => any;
interface ComponentProps {
onChange?: HandlerType;
}
type SingleComponent = [SvelteComponent, ComponentProps, TestRendererProps];
export type TestRendererProps =
| undefined
| string
| SingleComponent
| SingleComponent[];
</script>
<script lang="ts">
import type { SvelteComponent } from "svelte";
function isSingleComponent(
props: SingleComponent | SingleComponent[]
): props is SingleComponent {
return Array.isArray(props) && !Array.isArray(props[0]);
}
export let allProps: TestRendererProps;
let onChange: HandlerType = () => {};
if (allProps && typeof allProps !== "string" && isSingleComponent(allProps)) {
if (allProps[1].onChange) {
onChange = allProps[1].onChange;
}
}
</script>
{#if typeof allProps === "string"}
{allProps}
{:else if Array.isArray(allProps)}
{#if Array.isArray(allProps[0])}
{#each allProps as childProps}
<svelte:self allProps={childProps} />
{/each}
{:else}
<svelte:component this={allProps[0]} {...allProps[1]} on:change={onChange}>
<svelte:self allProps={allProps[2]} />
</svelte:component>
{/if}
{/if}