ユーザーアイコン

mizuko

約2か月前

0
0

Storybook v9.1.2でのインタラクションテスト実装とMSW統合

React
TypeScript
Storybook
MSW

Storybook v9.1.2でインタラクションテストを実装する際、@storybook/testパッケージはv8系しか存在しないため、代わりにstorybook/testモジュールを使用する。

正しいインポート方法:

// ✅ 正しい import { expect, within, userEvent, waitFor } from 'storybook/test' // ❌ 間違い(v8系のパッケージ) import { expect, within, userEvent, waitFor } from '@storybook/test'

MSWとの統合設定:

// .storybook/preview.ts import { initialize, mswLoader } from 'msw-storybook-addon' import { handlers } from '../src/mocks/handlers' initialize({ onUnhandledRequest: 'bypass', serviceWorker: { url: '/mockServiceWorker.js' } }) const preview: Preview = { parameters: { msw: { handlers: handlers } }, loaders: [mswLoader], }

Play関数でのインタラクションテスト例:

play: async ({ canvasElement }) => { const canvas = within(canvasElement) // ユーザー操作のシミュレーション const button = await canvas.findByRole('button') await userEvent.click(button) // アサーション await waitFor(() => { expect(canvas.getByText('Success')).toBeInTheDocument() }) }

Storybook v9.1.2には@vitest/spy、@testing-library/jest-dom、@testing-library/user-eventが組み込まれており、追加パッケージのインストールは不要。これにより、--legacy-peer-depsを使用せずにクリーンな依存関係を維持できる。