交互

自动执行、测试和调试用户交互

在 Github 上查看

Storybook 插件交互

Storybook 插件交互允许在 Storybook 中对交互和测试进行可视化调试。

Screenshot

安装

通过添加 @storybook/addon-interactions 依赖项来安装此插件

yarn add -D @storybook/addon-interactions @storybook/test

.storybook/main.js

export default {
  addons: ['@storybook/addon-interactions'],
};

注意,@storybook/addon-interactions 必须列在 @storybook/addon-actions@storybook/addon-essentials 之后。

使用

交互依赖于 Vitest 和 Testing Library 的“仪器化”版本,您可以从 @storybook/test 而不是其原始包中导入这些版本。然后,您可以在 play 函数中使用这些库。

import { expect, fn, userEvent, within } from '@storybook/test';
import { Button } from './Button';

export default {
  title: 'Button',
  component: Button,
  args: {
    onClick: fn(),
  },
};

const Template = (args) => <Button {...args} />;

export const Demo = Template.bind({});
Demo.play = async ({ args, canvasElement }) => {
  const canvas = within(canvasElement);
  await userEvent.click(canvas.getByRole('button'));
  await expect(args.onClick).toHaveBeenCalled();
};

为了在插件面板中启用逐步骤调试,对 userEvent.*fireEventfindBy*waitFor*expect 的调用必须是 await-ed。在调试期间,这些函数会返回一个 Promise,该 Promise 只有在您继续执行到下一步时才会解析。

虽然您可以在技术上使用 screen,但建议使用 within(canvasElement)。除了在找不到 DOM 元素时为您提供更好的错误消息之外,它还会确保您的 play 函数与 Storybook 文档兼容。

请注意,fn 函数会将间谍分配给您的参数,以便您可以断言调用。

制作人
  • kasperpeulen
    kasperpeulen
  • jreinhold
    jreinhold
适用框架
    Angular
    Ember
    HTML
    Marko
    Mithril
    Preact
    Rax
    React
    Riot
    Svelte
    Vue
    Web Components
标签