Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SvelteKit: Support 2.0 modules with mocks #25244

Merged
merged 6 commits into from
Dec 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions code/e2e-tests/framework-svelte.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,5 +122,21 @@ test.describe('SvelteKit', () => {
hasText: `"invalidateAll"`,
});
await expect(invalidateAllLogItem).toBeVisible();

const replaceState = root.getByRole('button', { name: 'replaceState' });
await replaceState.click();

const replaceStateLogItem = page.locator('#storybook-panel-root #panel-tab-content', {
hasText: `/storybook-replace-state`,
});
await expect(replaceStateLogItem).toBeVisible();

const pushState = root.getByRole('button', { name: 'pushState' });
await pushState.click();

const pushStateLogItem = page.locator('#storybook-panel-root #panel-tab-content', {
hasText: `/storybook-push-state`,
});
await expect(pushStateLogItem).toBeVisible();
});
});
2 changes: 2 additions & 0 deletions code/frameworks/sveltekit/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,8 @@ You can add the name of the module you want to mock to `parameters.sveltekit_exp
| `import { navigating } from "$app/stores"` | `parameters.sveltekit_experimental.stores.navigating` | A Partial of the navigating store |
| `import { updated } from "$app/stores"` | `parameters.sveltekit_experimental.stores.updated` | A boolean representing the value of updated (you can also access `check()` which will be a noop) |
| `import { goto } from "$app/navigation"` | `parameters.sveltekit_experimental.navigation.goto` | A callback that will be called whenever goto is called, in no function is provided an action will be logged to the Actions panel |
| `import { pushState } from "$app/navigation"` | `parameters.sveltekit_experimental.navigation.pushState` | A callback that will be called whenever pushState is called, in no function is provided an action will be logged to the Actions panel |
| `import { replaceState } from "$app/navigation"` | `parameters.sveltekit_experimental.navigation.replaceState` | A callback that will be called whenever replaceState is called, in no function is provided an action will be logged to the Actions panel |
| `import { invalidate } from "$app/navigation"` | `parameters.sveltekit_experimental.navigation.invalidate` | A callback that will be called whenever invalidate is called, in no function is provided an action will be logged to the Actions panel |
| `import { invalidateAll } from "$app/navigation"` | `parameters.sveltekit_experimental.navigation.invalidateAll` | A callback that will be called whenever invalidateAll is called, in no function is provided an action will be logged to the Actions panel |
| `import { afterNavigate } from "$app/navigation"` | `parameters.sveltekit_experimental.navigation.afterNavigate` | An object that will be passed to the afterNavigate function (which will be invoked onMount) called |
Expand Down
2 changes: 1 addition & 1 deletion code/frameworks/sveltekit/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
},
"peerDependencies": {
"svelte": "^4.0.0 || ^5.0.0-next.16",
"vite": "^4.0.0"
"vite": "^4.0.0 || ^5.0.0"
},
"engines": {
"node": "^14.18 || >=16"
Expand Down
14 changes: 14 additions & 0 deletions code/frameworks/sveltekit/src/mocks/app/navigation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,17 @@ export async function invalidateAll() {
export function preloadCode() {}

export function preloadData() {}

export async function pushState(...args: any[]) {
const event = new CustomEvent('storybook:pushState', {
detail: args,
});
window.dispatchEvent(event);
}

export async function replaceState(...args: any[]) {
const event = new CustomEvent('storybook:replaceState', {
detail: args,
});
window.dispatchEvent(event);
}
2 changes: 1 addition & 1 deletion code/frameworks/sveltekit/src/preview.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ export const decorators: Decorator[] = [

const removeNavigationListeners = createListeners(
'navigation',
['goto', 'invalidate', 'invalidateAll'],
['goto', 'invalidate', 'invalidateAll', 'pushState', 'replaceState'],
true
);
const removeFormsListeners = createListeners('forms', ['enhance']);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script>
import { goto, invalidate, invalidateAll, afterNavigate } from '$app/navigation';
import { goto, invalidate, invalidateAll, afterNavigate, replaceState, pushState } from '$app/navigation';

export let afterNavigateFn;

Expand All @@ -23,3 +23,15 @@
invalidateAll();
}}>invalidateAll</button
>

<button
on:click={() => {
pushState('/storybook-push-state', {});
}}>pushState</button
>

<button
on:click={() => {
replaceState('/storybook-replace-state', {});
}}>replaceState</button
>
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,42 @@ export const Goto = {
},
};

const replaceState = fn();

export const ReplaceState = {
async play({ canvasElement }) {
const canvas = within(canvasElement);
const button = canvas.getByText('replaceState');
button.click();
expect(replaceState).toHaveBeenCalledWith('/storybook-replace-state', {});
},
parameters: {
sveltekit_experimental: {
navigation: {
replaceState,
},
},
},
};

const pushState = fn();

export const PushState = {
async play({ canvasElement }) {
const canvas = within(canvasElement);
const button = canvas.getByText('pushState');
button.click();
expect(pushState).toHaveBeenCalledWith('/storybook-push-state', {});
},
parameters: {
sveltekit_experimental: {
navigation: {
pushState,
},
},
},
};

export const DefaultActions = {};

const invalidate = fn();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script>
import { goto, invalidate, invalidateAll, afterNavigate } from '$app/navigation';
import { goto, invalidate, invalidateAll, afterNavigate, pushState, replaceState } from '$app/navigation';

export let afterNavigateFn;
if(afterNavigateFn){
Expand All @@ -24,3 +24,15 @@
invalidateAll();
}}>invalidateAll</button
>

<button
on:click={() => {
pushState('/storybook-push-state', {});
}}>pushState</button
>

<button
on:click={() => {
replaceState('/storybook-replace-state', {});
}}>replaceState</button
>
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,42 @@ export const Goto = {
},
};

const replaceState = fn();

export const ReplaceState = {
async play({ canvasElement }) {
const canvas = within(canvasElement);
const button = canvas.getByText('replaceState');
button.click();
expect(replaceState).toHaveBeenCalledWith('/storybook-replace-state', {});
},
parameters: {
sveltekit_experimental: {
navigation: {
replaceState,
},
},
},
};

const pushState = fn();

export const PushState = {
async play({ canvasElement }) {
const canvas = within(canvasElement);
const button = canvas.getByText('pushState');
button.click();
expect(pushState).toHaveBeenCalledWith('/storybook-push-state', {});
},
parameters: {
sveltekit_experimental: {
navigation: {
pushState,
},
},
},
};

export const DefaultActions = {};

const invalidate = fn();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script>
import { goto, invalidate, invalidateAll, afterNavigate } from '$app/navigation';
import { goto, invalidate, invalidateAll, afterNavigate, replaceState, pushState } from '$app/navigation';

export let afterNavigateFn;

Expand All @@ -23,3 +23,15 @@
invalidateAll();
}}>invalidateAll</button
>

<button
on:click={() => {
pushState('/storybook-push-state', {});
}}>pushState</button
>

<button
on:click={() => {
replaceState('/storybook-replace-state', {});
}}>replaceState</button
>
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,42 @@ export const Goto = {
},
};

const replaceState = fn();

export const ReplaceState = {
async play({ canvasElement }) {
const canvas = within(canvasElement);
const button = canvas.getByText('replaceState');
button.click();
expect(replaceState).toHaveBeenCalledWith('/storybook-replace-state', {});
},
parameters: {
sveltekit_experimental: {
navigation: {
replaceState,
},
},
},
};

const pushState = fn();

export const PushState = {
async play({ canvasElement }) {
const canvas = within(canvasElement);
const button = canvas.getByText('pushState');
button.click();
expect(pushState).toHaveBeenCalledWith('/storybook-push-state', {});
},
parameters: {
sveltekit_experimental: {
navigation: {
pushState,
},
},
},
};

export const DefaultActions = {};

const invalidate = fn();
Expand Down
2 changes: 1 addition & 1 deletion code/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -6687,7 +6687,7 @@ __metadata:
vite: "npm:^4.0.0"
peerDependencies:
svelte: ^4.0.0 || ^5.0.0-next.16
vite: ^4.0.0
vite: ^4.0.0 || ^5.0.0
languageName: unknown
linkType: soft

Expand Down