シーディングとテスト

モック Strapi サーバー

モックサーバー(scripts/mock-strapi.mjs)は軽量な Node.js HTTP サーバーで、Strapi v5 REST API を模倣し、CMS インスタンスを起動せずにローカル開発を可能にします。

起動方法:

node scripts/mock-strapi.mjs

http://localhost:1337 でリッスンします。

リファレンスデータ

サーバーは起動時にインメモリのリファレンスデータを作成します:

  • 著者: FlexGalaxy.AI Team (documentId author-001)

  • カテゴリ: Features (slug features、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 件になります。

エンドポイント

パス

動作

GET /api/articles

クエリフィルター付きのページネーションリスト(下記参照)

GET /api/categories

カテゴリを返却、locale パラメータに対応

GET /api/tags

ページネーション付きタグ一覧

GET /api/pages

空のリストを返却(モックページなし)

OPTIONS *

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

http://localhost:1337

Strapi ベース URL

STRAPI_EMAIL

(必須)

管理者メールアドレス

STRAPI_PASSWORD

(必須)

管理者パスワード

スクリプトは Strapi Content Manager の UID を使用します:

  • api::article.article

  • api::author.author

  • api::category.category

  • api::tag.tag

ローカライゼーションは /actions/localize エンドポイントを使用して zh-CN と ja 向けに作成されます。すべての記事は作成後に公開されます。

seed-blog-content.mjs

ARTICLES をエクスポートします --- FlexGalaxy.AI の倉庫・工場自動化に関する 9 件の機能紹介記事定義の配列:

#

Slug

タグ

1

data-processing-and-prediction

efficiency, data-analytics, AI

2

execution-and-planning

scheduling, automation, AI, efficiency

3

dashboards-and-statistics

visualization, data-analytics, efficiency

4

data-isolation-and-encryption

security, encryption, compliance

5

real-time-monitoring

monitoring, IoT, maintenance

6

proactive-alerts

monitoring, maintenance, AI, automation

7

unified-human-machine-platform

AMR, collaboration, automation

8

connect-multiple-iot-devices

IoT, AMR, integration

9

seamless-integration

integration, API, automation, efficiency

各記事には slugtags[]、および locales.en.{ title, summary, content } が含まれます。

seed-blog-edge-cases.mjs

EDGE_CASE_ARTICLES をエクスポートします --- ブログレンダリングエンジンのストレステスト用に設計された 11 件の記事:

#

Slug

テスト内容

1

edge-case-extremely-long-title-...

タイトルのオーバーフローと折り返し

2

edge-case-deep-heading-nesting

h2 から h6 までの見出し

3

edge-case-code-blocks

フェンスドコード(TS, Python, Bash, JSON)

4

edge-case-lists-and-nesting

順序付き・順序なし・ネストされたリスト

5

edge-case-rich-formatting

引用、太字、斜体、取り消し線

6

edge-case-tables

幅広テーブル、配置、長いコンテンツ

7

edge-case-very-long-article

8 セクション記事、スクロール動作

8

edge-case-images

さまざまな画像サイズとシーケンス

9

edge-case-youtube-embeds

YouTube iframe、レスポンシブラッパー

10

edge-case-mermaid-diagrams

フローチャート、シーケンス、ER、ステート、ガント

11

edge-case-math-equations

インラインおよびディスプレイ LaTeX 数式

ユニットテスト

プロジェクトでは VitestReact 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 で記事を返却

  • fetchFeaturedArticlesfeatured=true でフィルタリング

  • fetchCategoriesfetchTags が配列を返却

  • fetchPublicMediaCollections / fetchPublicMediaCollection がデータを返却

  • 非 OK レスポンス時に "Strapi API error: <status>" をスロー

  • strapiMediaUrl が null、undefined、絶対 URL、相対 URL を処理

SectionRenderer.test.tsx --- CMS セクションレンダリングのテスト:

  • hero、feature grid、リッチテキスト、call-to-action セクションをレンダリング

  • 不明なセクションタイプを適切にスキップ

  • セクションがない場合に空の出力をレンダリング

  • 複数のセクションを正しい順序でレンダリング