docs/_snippets/storybook-test-fn-mock-spy.md
import type { Meta, StoryObj } from '@storybook/angular';
import { expect } from 'storybook/test';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
import NoteUI from './note-ui.component';
const meta: Meta<NoteUI> = { component: NoteUI };
export default meta;
type Story = StoryObj<NoteUI>;
const notes = createNotes();
export const SaveFlow: Story = {
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
};
import { expect } from 'storybook/test';
import preview from '../.storybook/preview';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
import NoteUI from './note-ui.component';
const meta = preview.meta({ component: NoteUI });
const notes = createNotes();
export const SaveFlow = meta.story({
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
});
<script module>
import { defineMeta } from '@storybook/addon-svelte-csf';
import { expect } from 'storybook/test';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
import NoteUI from './note-ui.svelte';
const { Story } = defineMeta({
title: 'Mocked/NoteUI',
component: NoteUI,
});
</script>
<script>
const notes = createNotes();
</script>
<Story name="Save Flow โถ"
args={{ isEditing: true, note: notes[0] }}
play={async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
}} />
import { expect } from 'storybook/test';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
import NoteUI from './note-ui.svelte';
export default {
title: 'Mocked/NoteUI',
component: NoteUI,
};
const notes = createNotes();
export const SaveFlow = {
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
};
<script module>
import { defineMeta } from '@storybook/addon-svelte-csf';
import { expect } from 'storybook/test';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
import NoteUI from './note-ui.svelte';
const { Story } = defineMeta({
title: 'Mocked/NoteUI',
component: NoteUI,
});
</script>
<script>
const notes = createNotes();
</script>
<Story name="Save Flow โถ"
args={{ isEditing: true, note: notes[0] }}
play={async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
}} />
// Replace your-framework with svelte-vite or sveltekit
import type { Meta, StoryObj } from '@storybook/your-framework';
import { expect } from 'storybook/test';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
import NoteUI from './note-ui.svelte';
const meta = {
title: 'Mocked/NoteUI',
component: NoteUI,
} satisfies Meta<typeof NoteUI>;
export default meta;
type Story = StoryObj<typeof meta>;
const notes = createNotes();
export const SaveFlow: Story = {
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
};
// Replace your-framework with the framework you are using, e.g. react-vite, nextjs, vue3-vite, etc.
import type { Meta, StoryObj } from '@storybook/your-framework';
import { expect } from 'storybook/test';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
import NoteUI from './note-ui';
const meta = { component: NoteUI } satisfies Meta<typeof NoteUI>;
export default meta;
type Story = StoryObj<typeof meta>;
const notes = createNotes();
export const SaveFlow: Story = {
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
};
import { expect } from 'storybook/test';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
import NoteUI from './note-ui';
export default { component: NoteUI };
const notes = createNotes();
export const SaveFlow = {
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
};
import { expect } from 'storybook/test';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
export default {
component: 'note-ui',
};
const notes = createNotes();
export const SaveFlow = {
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
};
import type { Meta, StoryObj } from '@storybook/web-components-vite';
import { expect } from 'storybook/test';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
const meta: Meta = {
component: 'note-ui',
};
export default meta;
type Story = StoryObj;
const notes = createNotes();
export const SaveFlow: Story = {
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
};
import { expect } from 'storybook/test';
import preview from '../.storybook/preview';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
const meta = preview.meta({
component: 'note-ui',
});
const notes = createNotes();
export const SaveFlow = meta.story({
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
});
import { expect } from 'storybook/test';
import preview from '../.storybook/preview';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
const meta = preview.meta({
component: 'note-ui',
});
const notes = createNotes();
export const SaveFlow = meta.story({
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
});
import { expect } from 'storybook/test';
import preview from '../.storybook/preview';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
import NoteUI from './note-ui';
const meta = preview.meta({ component: NoteUI });
const notes = createNotes();
export const SaveFlow = meta.story({
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
});
import { expect } from 'storybook/test';
import preview from '../.storybook/preview';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
import NoteUI from './note-ui';
const meta = preview.meta({
component: NoteUI,
});
const notes = createNotes();
export const SaveFlow = meta.story({
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
});
import { expect } from 'storybook/test';
import preview from '../.storybook/preview';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
import NoteUI from './note-ui.vue';
const meta = preview.meta({ component: NoteUI });
const notes = createNotes();
export const SaveFlow = meta.story({
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
});
import { expect } from 'storybook/test';
import preview from '../.storybook/preview';
// ๐ Automocked module resolves to '../app/__mocks__/actions'
import { saveNote } from '../app/actions';
import { createNotes } from '../app/mocks/notes';
import NoteUI from './note-ui.vue';
const meta = preview.meta({
component: NoteUI,
});
const notes = createNotes();
export const SaveFlow = meta.story({
name: 'Save Flow โถ',
args: {
isEditing: true,
note: notes[0],
},
play: async ({ canvas, userEvent }) => {
const saveButton = canvas.getByRole('menuitem', { name: /done/i });
await userEvent.click(saveButton);
// ๐ This is the mock function, so you can assert its behavior
await expect(saveNote).toHaveBeenCalled();
},
});