9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

1人フロントエンドAdvent Calendar 2023

Day 8

storybook/jest、storybook/testing-libraryからstorybook/testに移行する

Posted at

storybook/test

Storybookのバージョン7.6から新たに@storybook/testを利用できるようになりました。
これまで、Storybook上でテストを記述するときは@storybook/jest@storybook/testing-libraryを用いていましたが、今後は@storybook/testに統合して利用することができます。
@storybook/testはVitestをベースに作られており(組み込まれているわけではありません)、パッケージの合理化、サイズが縮小・ロード時間を短縮などさまざまな点でパワーアップしています。
@storybook/testでは、Vitestで利用できる幾つかのメソッドが活用できます。

import {expect, fn, spyOn, isMockFunction, spies } from '@storybook/test'

これまではモックを利用したテストがStorybookのツールを使ってうまくできなかったのでfnなどを用いて綺麗にできるようになったのが大変良い変更だなと思いました。

import Button from './button'

import type { Meta, StoryObj } from '@storybook/react'
import { within, userEvent, expect, fn } from '@storybook/test';

const meta: Meta<typeof Button> =  {
  component: Button,
  args: {
    onClick: fn(),
  },
};

export default meta;

export const Default: StoryObj<typeof Button> = {
  play: async ({ args, canvasElement }) => {
    const canvas = within(canvasElement);
    await userEvent.click(canvas.getByRole('button'));
    await expect(args.onClick).toHaveBeenCalled();
  },
};

移行

storybookを最新バージョン(7.6以上)にあげます。

npx storybook upgrade

そして、@storybook/jest@storybook/testing-libraryを消します。

npm uninstall @storybook/jest @storybook/testing-library

削除できたら@storybook/testをインストールします。

npm i -D @storybook/test

その後全てのテストファイルで、@storybook/jest@storybook/testing-libraryからインポートしているところから@storybook/testに置き換えることで移行は完了です。

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?