シーディングとテスト¶
モック Strapi サーバー¶
モックサーバー(scripts/mock-strapi.mjs)は軽量な Node.js HTTP サーバーで、Strapi v5 REST API を模倣し、CMS インスタンスを起動せずにローカル開発を可能にします。
起動方法:
node scripts/mock-strapi.mjs
http://localhost:1337 でリッスンします。
リファレンスデータ¶
サーバーは起動時にインメモリのリファレンスデータを作成します:
著者:
FlexGalaxy.AI Team(documentIdauthor-001)カテゴリ:
Features(slugfeatures、zh-CN では产品特性、ja では機能紹介にローカライズ)タグ (16): efficiency, security, collaboration, data-analytics, AI, automation, scheduling, visualization, compliance, encryption, monitoring, IoT, integration, maintenance, AMR, API
記事は seed-blog-content.mjs (9 件の機能紹介記事) と seed-blog-edge-cases.mjs (11 件のエッジケース記事) から統合され、合計 20 件になります。
エンドポイント¶
パス |
動作 |
|---|---|
|
クエリフィルター付きのページネーションリスト(下記参照) |
|
カテゴリを返却、 |
|
ページネーション付きタグ一覧 |
|
空のリストを返却(モックページなし) |
|
204 を返却(CORS プリフライト) |
その他のパス |
404 JSON を返却 |
記事クエリパラメータ:
filters[slug][$eq]=<slug>--- slug で単一記事を取得filters[category][slug][$eq]=<slug>--- カテゴリでフィルタリングfilters[tags][slug][$eq]=<slug>--- タグでフィルタリングpagination[page]=<n>/pagination[pageSize]=<n>--- ページネーション
シードスクリプト¶
これらのスクリプトは Admin Content Manager API を使用して、実際の Strapi v5 インスタンスにデータを投入します。
seed-blog-articles.mjs¶
すべてのリファレンスデータ(著者、ローカライゼーション付きカテゴリ、16 タグ)および英語・中国語・日本語のローカライゼーション付き 9 件の機能紹介記事を作成します。
STRAPI_EMAIL=admin@flexgalaxy.ai \
STRAPI_PASSWORD=Admin12345 \
node scripts/seed-blog-articles.mjs
環境変数:
変数 |
デフォルト |
説明 |
|---|---|---|
|
|
Strapi ベース URL |
|
(必須) |
管理者メールアドレス |
|
(必須) |
管理者パスワード |
スクリプトは Strapi Content Manager の UID を使用します:
api::article.articleapi::author.authorapi::category.categoryapi::tag.tag
ローカライゼーションは /actions/localize エンドポイントを使用して zh-CN と ja 向けに作成されます。すべての記事は作成後に公開されます。
seed-blog-content.mjs¶
ARTICLES をエクスポートします --- FlexGalaxy.AI の倉庫・工場自動化に関する 9 件の機能紹介記事定義の配列:
# |
Slug |
タグ |
|---|---|---|
1 |
|
efficiency, data-analytics, AI |
2 |
|
scheduling, automation, AI, efficiency |
3 |
|
visualization, data-analytics, efficiency |
4 |
|
security, encryption, compliance |
5 |
|
monitoring, IoT, maintenance |
6 |
|
monitoring, maintenance, AI, automation |
7 |
|
AMR, collaboration, automation |
8 |
|
IoT, AMR, integration |
9 |
|
integration, API, automation, efficiency |
各記事には slug、tags[]、および locales.en.{ title, summary, content } が含まれます。
seed-blog-edge-cases.mjs¶
EDGE_CASE_ARTICLES をエクスポートします --- ブログレンダリングエンジンのストレステスト用に設計された 11 件の記事:
# |
Slug |
テスト内容 |
|---|---|---|
1 |
|
タイトルのオーバーフローと折り返し |
2 |
|
h2 から h6 までの見出し |
3 |
|
フェンスドコード(TS, Python, Bash, JSON) |
4 |
|
順序付き・順序なし・ネストされたリスト |
5 |
|
引用、太字、斜体、取り消し線 |
6 |
|
幅広テーブル、配置、長いコンテンツ |
7 |
|
8 セクション記事、スクロール動作 |
8 |
|
さまざまな画像サイズとシーケンス |
9 |
|
YouTube iframe、レスポンシブラッパー |
10 |
|
フローチャート、シーケンス、ER、ステート、ガント |
11 |
|
インラインおよびディスプレイ LaTeX 数式 |
ユニットテスト¶
プロジェクトでは Vitest を React Testing Library および DOM 環境として jsdom と組み合わせて使用しています。
# Run once (CI mode)
npm test
# Watch mode
npm run test:watch
テストスイート¶
i18n.test.ts --- src/lib/i18n.ts のテスト:
ロケール設定: 3 ロケール、デフォルトは
en、すべてにラベルが存在isValidLocaleは有効なロケールに true、無効なロケールに false を返却t()は en, zh-CN, ja に対して正しい翻訳を返却ロケールにキーが存在しない場合、英語にフォールバック
翻訳が存在しない場合、キー自体を返却
すべてのロケールで
{placeholder}補間に対応
strapi.test.ts --- src/lib/strapi.ts のテスト(global.fetch をモック):
fetchPublicPagesが正しいフィルターとロケールパラメータを送信fetchPublicPageがページまたは未検出時に null を返却fetchPublicArticlesがページネーションとカテゴリフィルターパラメータを送信fetchPublicArticleが slug で記事を返却fetchFeaturedArticlesがfeatured=trueでフィルタリングfetchCategoriesとfetchTagsが配列を返却fetchPublicMediaCollections/fetchPublicMediaCollectionがデータを返却非 OK レスポンス時に
"Strapi API error: <status>"をスローstrapiMediaUrlが null、undefined、絶対 URL、相対 URL を処理
SectionRenderer.test.tsx --- CMS セクションレンダリングのテスト:
hero、feature grid、リッチテキスト、call-to-action セクションをレンダリング
不明なセクションタイプを適切にスキップ
セクションがない場合に空の出力をレンダリング
複数のセクションを正しい順序でレンダリング