From 0fd1e220fcba4a5f5d0b951bae925241e1afaca3 Mon Sep 17 00:00:00 2001 From: Dylan Piercey Date: Thu, 31 Mar 2022 20:47:19 -0700 Subject: [PATCH] feat: expose instance property from render --- package-lock.json | 2 +- src/__tests__/render.server.ts | 11 +++++++++-- src/index-browser.ts | 1 + src/index.ts | 10 ++++++++-- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6782446..07d5b75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "@marko/testing-library", - "version": "5.1.0", + "version": "6.0.0", "license": "MIT", "dependencies": { "@testing-library/dom": "^8", diff --git a/src/__tests__/render.server.ts b/src/__tests__/render.server.ts index 5371d5e..6677599 100644 --- a/src/__tests__/render.server.ts +++ b/src/__tests__/render.server.ts @@ -46,14 +46,14 @@ test("fails when rerendering", async () => { await expect( rerender({ name: "Dylan" }) ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Components cannot re-render on the server side"` + `"Components cannot re-render on the server side."` ); }); test("fails when checking emitted events", async () => { const { emitted } = await render(Clickable); expect(() => emitted("button-click")).toThrowErrorMatchingInlineSnapshot( - `"Components should not emit events on the server side"` + `"Components should not emit events on the server side."` ); }); @@ -74,3 +74,10 @@ test("fails when emitting events", async () => { `"Cannot perform client side interaction tests on the server side. Please use @marko/testing-library in a browser environment."` ); }); + +test("fails when trying to read instance", async () => { + const result = await render(Clickable); + expect(() => result.instance).toThrowErrorMatchingInlineSnapshot( + `"Cannot access component instance for server side tests."` + ); +}); diff --git a/src/index-browser.ts b/src/index-browser.ts index 174dad0..3f7b21e 100644 --- a/src/index-browser.ts +++ b/src/index-browser.ts @@ -71,6 +71,7 @@ export async function render( return { container, + instance, emitted( type?: N extends InternalEventNames ? never : N ) { diff --git a/src/index.ts b/src/index.ts index e18c77c..bca2005 100644 --- a/src/index.ts +++ b/src/index.ts @@ -31,6 +31,7 @@ export async function render( ): Promise< BoundFunctions & { container: HTMLElement | DocumentFragment; + instance: any; debug: typeof testingLibraryScreen["debug"]; emitted( type?: N extends InternalEventNames ? never : N @@ -83,16 +84,21 @@ export async function render( return { container, + get instance(): any { + throw new Error( + "Cannot access component instance for server side tests." + ); + }, emitted( // eslint-disable-next-line @typescript-eslint/no-unused-vars type?: N extends InternalEventNames ? never : N ): NonNullable { - throw new Error("Components should not emit events on the server side"); + throw new Error("Components should not emit events on the server side."); }, // eslint-disable-next-line @typescript-eslint/no-unused-vars rerender(newInput?: typeof input): Promise { return Promise.reject( - new Error("Components cannot re-render on the server side") + new Error("Components cannot re-render on the server side.") ); }, cleanup() {