Skip to content

Commit b3aa424

Browse files
committed
test: reactify() types
1 parent 8d8cf22 commit b3aa424

File tree

8 files changed

+985
-39
lines changed

8 files changed

+985
-39
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
"svelte-check": "^4.1.4",
7676
"svelte-youtube-lite": "~1.2.1",
7777
"svelte2tsx": "^0.7.34",
78+
"tsd": "^0.31.2",
7879
"typescript": "^5.7.3",
7980
"typescript-eslint": "^8.22.0",
8081
"vite": "^6.0.11",

pnpm-lock.yaml

Lines changed: 945 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/tests/react-router/Link.spec.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// @vitest-environment happy-dom
12
import * as React from "react";
23
import { render } from "@testing-library/react";
34
import { describe, expect, it } from "vitest";

src/tests/react-router/NavLink.spec.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// @vitest-environment happy-dom
12
import { describe, it, expect } from "vitest";
23
import { render } from "@testing-library/react";
34
import * as React from "react";

src/tests/reactify-tsx.spec.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import * as React from "react";
2+
import { renderToString } from "react-dom/server";
3+
import { describe, expect, it } from "vitest";
4+
import reactify from "../lib/reactify";
5+
import Dog from "./fixtures/Dog.svelte";
6+
7+
describe("reactify-tsx", () => {
8+
const svelte = reactify({ Dog }); // in a tsx file, Dog is of type "any" :-(
9+
10+
it("renders the Svelte component output into React", () => {
11+
expect(renderToString(<svelte.Dog name="Fido" />)).toMatchInlineSnapshot(
12+
`"<reactify-svelte style="display:contents"><!--[--><svelte-dog class="svelte-1n9pbz6">Fido</svelte-dog><!--]--></reactify-svelte>"`,
13+
);
14+
});
15+
});

src/tests/reactify.spec.ts

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,34 @@
1-
// @vitest-environment node
2-
3-
import * as React from "react";
4-
import { renderToString } from "react-dom/server";
51
import { describe, expect, it } from "vitest";
2+
import { expectType } from "tsd";
3+
import * as React from "react";
64
import reactify from "../lib/reactify";
75
import Dog from "./fixtures/Dog.svelte";
6+
import Children from "./fixtures/Children.svelte";
7+
import { renderToString } from "react-dom/server";
8+
9+
describe("reactify-ts", () => {
10+
const svelte = reactify({ Dog, Children });
811

9-
describe("reactify", () => {
10-
const svelte = reactify({ Dog });
11-
type ReactProps = React.ComponentProps<typeof svelte.Dog>;
12+
it("converts Svelte props into React props", () => {
13+
expectType<
14+
React.FC<{
15+
name: string;
16+
onbark?: ((sound: string) => void) | undefined;
17+
}>
18+
>(svelte.Dog);
19+
expectType<React.FC<{ children: React.ReactNode }>>(svelte.Children);
1220

13-
it("renders a svelte-wrapper", () => {
14-
const props: ReactProps = { name: "Fido", onbark() {} };
15-
const html = renderToString(React.createElement(svelte.Dog, props));
21+
const html = renderToString(
22+
React.createElement(svelte.Dog, { name: "Fido" }),
23+
);
1624
expect(html).toMatchInlineSnapshot(
1725
`"<reactify-svelte style="display:contents"><!--[--><svelte-dog class="svelte-1n9pbz6">Fido</svelte-dog><!--]--></reactify-svelte>"`,
1826
);
1927
});
20-
it("caches the conversion component", () => {
28+
29+
it("reactify() on the same component returns a identical (cached) react component", () => {
2130
const DogReact = reactify(Dog);
22-
expect(DogReact).toBe(svelte.Dog);
23-
const svelte2 = reactify({ Dog });
24-
expect(svelte2.Dog === DogReact).toBeTruthy();
31+
expect(svelte.Dog === DogReact).toBeTruthy();
32+
expectType<typeof svelte.Dog>(DogReact);
2533
});
2634
});

src/tests/reactify.spec.tsx

Lines changed: 0 additions & 19 deletions
This file was deleted.

vite.config.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ export default defineConfig({
66
plugins: [sveltekit()],
77
css: { devSourcemap: true },
88
test: {
9-
environment: "happy-dom",
109
exclude: [...configDefaults.exclude, "dist", "playwright"],
1110
},
1211
resolve: {

0 commit comments

Comments
 (0)