Back to Storybook

Storybook Test Fn Mock Spy

docs/_snippets/storybook-test-fn-mock-spy.md

10.3.613.9 KB
Original Source
ts
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();
  },
};
ts
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();
  },
});
svelte
<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();
  }} />
js
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();
  },
};
svelte
<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();
  }} />
ts
// 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();
  },
};
ts
// 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();
  },
};
js
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();
  },
};
js
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();
  },
};
ts
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();
  },
};
js
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();
  },
});
ts
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();
  },
});
ts
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();
  },
});
<!-- JS snippets still needed while providing both CSF 3 & Next -->
js
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();
  },
});
ts
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();
  },
});
<!-- JS snippets still needed while providing both CSF 3 & Next -->
js
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();
  },
});