Trang chủSandboxTrưng bàyỨng dụngTài liệuBlog
    • EnglishTiếng Anh
      EN
    • русскийTiếng Nga
      RU
    • 日本語Tiếng Nhật
      JA
    • françaisTiếng Pháp
      FR
    • 한국어Tiếng Hàn
      KO
    • 中文Tiếng Trung
      ZH
    • españolTiếng Tây Ban Nha
      ES
    • DeutschTiếng Đức
      DE
    • العربيةTiếng Ả Rập
      AR
    • italianoTiếng Italy
      IT
    • British EnglishTiếng Anh (Anh)
      EN-GB
    • portuguêsTiếng Bồ Đào Nha
      PT
    • हिन्दीTiếng Hindi
      HI
    • TürkçeTiếng Thổ Nhĩ Kỳ
      TR
    • polskiTiếng Ba Lan
      PL
    • IndonesiaTiếng Indonesia
      ID
    • Tiếng ViệtTiếng Việt
      VI
    • українськаTiếng Ukraina
      UK
    /
    Lọc tài liệu theo framework
    Alt+←
    Tại sao Intlayer?
    Bắt đầu
    Khái niệm
    • Intlayer làm việc như thế nào
    • Cấu hình
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • Editor visual
    • CMS
    • Tích hợp CI/CD
    • DịchSố nhiềuLiệt kêĐiều kiệnGiới tínhChènTệpNestingMarkdownHTMLLấy hàm
    • File cho mỗi ngôn ngữ
    • Biên dịch
    • Tự động điền
    • Kiểm tra
    • Tối ưu hóa gói
    Môi trường
    • Next.js 14 và App Router
      Next.js 15
      Next.js không locale URL
      Next.js và Page Router
      Trình biên dịch
    • Tanstack Start Solid
    • Astro và React
      Astro và Svelte
      Astro và Vue
      Astro và Solid
      Astro và Preact
      Astro và Lit
      Astro và Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt và Vue
    • Vite và Solid
    • SvelteKit
    • Vite và Preact
    • Vite và Vanilla JS
    • Vite và Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native và Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx và React
    Plugins
    • JSON
    • gettext (.po)
    Mở rộng VS Code
    Tác nhân
    • MCP Server
    • Kỹ năng tác nhân
    Phiên bản
    • v8
    • v7
    • v6
    Benchmark
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    Blog
    Đặt câu hỏi
    1. Documentation
    2. Testing
    Ngày tạo:2025-03-01Cập nhật lần cuối:2025-10-05
    Tham chiếu tài liệu này tới trợ lý AI yêu thích của bạn
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Đặt câu hỏi và nhận tóm tắt tài liệu bằng cách tham chiếu trang này và nhà cung cấp AI bạn chọn

    Lịch sử phiên bản

    1. "Thực hiện kiểm thử bất đồng bộ và thêm tùy chọn build"
      v6.0.15/10/2025
    2. "Giới thiệu về kiểm thử"
      v6.0.020/9/2025

    Nội dung của trang này đã được dịch bằng AI.

    Xem phiên bản mới nhất của nội dung gốc bằng tiếng Anh
    Chỉnh sửa tài liệu này

    Nếu bạn có ý tưởng để cải thiện tài liệu này, vui lòng đóng góp bằng cách gửi pull request trên GitHub.

    Liên kết GitHub tới tài liệu
    Sao chép

    Sao chép Markdown của tài liệu vào bộ nhớ tạm

    Kiểm thử nội dung của bạn

    Hướng dẫn này trình bày cách tự động xác minh từ điển của bạn đã đầy đủ, phát hiện các bản dịch còn thiếu trước khi phát hành, và kiểm thử giao diện người dùng đã được địa phương hóa trong ứng dụng của bạn.


    Những gì bạn có thể kiểm thử

    • Bản dịch còn thiếu: làm cho CI thất bại nếu bất kỳ ngôn ngữ bắt buộc nào bị thiếu trong bất kỳ từ điển nào.
    • Kết xuất giao diện người dùng địa phương hóa: kết xuất các component với một provider locale cụ thể và xác nhận trên văn bản/thuộc tính hiển thị.
    • Kiểm tra thời gian build: chạy kiểm tra nhanh cục bộ qua CLI.

    Bắt đầu nhanh: kiểm tra qua CLI

    Chạy kiểm tra từ thư mục gốc dự án của bạn:

    bash
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    npx intlayer content test

    Các cờ hữu ích:

    • --env-file [path]: tải biến môi trường từ một file.
    • -e, --env [name]: chọn một profile môi trường.
    • --base-dir [path]: đặt thư mục gốc của ứng dụng để giải quyết.
    • --verbose: hiển thị log chi tiết.
    • --prefix [label]: thêm tiền tố cho dòng log.
    • --build [build]: build các từ điển trước khi kiểm thử để đảm bảo nội dung được cập nhật. True sẽ ép buộc build, false sẽ bỏ qua build, undefined sẽ cho phép sử dụng cache của build.

    Lưu ý: CLI in ra báo cáo chi tiết nhưng không thoát với mã lỗi khác 0 khi có lỗi. Để kiểm soát CI, hãy thêm một unit test (dưới đây) để xác nhận không có locale bắt buộc nào bị thiếu.


    Kiểm tra lập trình (Vitest/Jest)

    Sử dụng API Intlayer CLI để xác nhận không có bản dịch nào bị thiếu cho các locale bắt buộc của bạn.

    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    /* @vitest-environment node */import { listMissingTranslations } from "intlayer/cli";import { describe, expect, it } from "vitest";describe("translations", () => {  it("has no missing required locales", async () => {    const result = await listMissingTranslations();    if (result.missingRequiredLocales.length > 0) {      // Hữu ích khi test thất bại cục bộ hoặc trong CI      console.log(result.missingTranslations);    }    expect(result.missingRequiredLocales).toHaveLength(0);  });});

    Tương đương với Jest:

    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    import { listMissingTranslations } from "intlayer/cli";test("không có locale bắt buộc nào bị thiếu", async () => {  const result = await listMissingTranslations();  if (result.missingRequiredLocales.length > 0) {    // Hữu ích khi test thất bại ở local hoặc trong CI    console.log(result.missingTranslations);  }  expect(result.missingRequiredLocales).toHaveLength(0);});

    Cách hoạt động:

    • Intlayer đọc cấu hình của bạn (locales, requiredLocales) và các từ điển đã khai báo, sau đó báo cáo:
      • missingTranslations: theo từng key, locale nào bị thiếu và từ file nào.
      • missingLocales: tập hợp tất cả các locale bị thiếu.
      • missingRequiredLocales: tập con giới hạn trong requiredLocales (hoặc tất cả các locales nếu requiredLocales không được thiết lập).

    Kiểm thử giao diện người dùng bản địa hóa (React / Next.js)

    Render các component dưới một Intlayer provider và kiểm tra nội dung hiển thị.

    Ví dụ React (Testing Library):

    tsx
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    import { IntlayerProvider } from "react-intlayer/client";import { render, screen } from "@testing-library/react";import { MyComponent } from "./MyComponent";test("hiển thị tiêu đề bản địa hóa bằng tiếng Anh", () => {  render(    <IntlayerProvider locale="en-US">      <MyComponent />    </IntlayerProvider>  );  expect(screen.getByText("Expected English title")).toBeInTheDocument();});

    Ví dụ Next.js (App Router): sử dụng wrapper của framework:

    tsx
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    import { IntlayerClientProvider } from "next-intlayer/client";import { render, screen } from "@testing-library/react";import { MyPage } from "./MyPage";test("hiển thị tiêu đề bản địa hóa bằng tiếng Pháp", () => {  render(    <IntlayerClientProvider locale="fr-FR">      <MyPage />    </IntlayerClientProvider>  );  expect(    screen.getByRole("heading", { name: "Titre attendu" })  ).toBeInTheDocument();});

    Mẹo:

    • Khi bạn cần giá trị chuỗi thô cho các thuộc tính (ví dụ: aria-label), truy cập trường .value được trả về bởi useIntlayer trong React.
    • Giữ các từ điển cùng vị trí với các component để dễ dàng kiểm thử đơn vị và dọn dẹp.

    Tích hợp liên tục

    Thêm một bài kiểm thử mà sẽ làm build thất bại khi thiếu bản dịch bắt buộc.

    package.json:

    json
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    {  "scripts": {    "test:i18n": "vitest run -c"  }}

    Ví dụ GitHub Actions:

    yaml
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    name: CIon: [push, pull_request]jobs:  test:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v4      - uses: actions/setup-node@v4        with:          node-version: 20      - run: npm ci      - run: npm run test:i18n

    Tùy chọn: chạy kiểm tra CLI để có bản tóm tắt dễ đọc bên cạnh các bài kiểm tra:

    bash
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    npx intlayer content test --verbose

    Khắc phục sự cố

    • Đảm bảo cấu hình Intlayer của bạn định nghĩa locales và (tùy chọn) requiredLocales.
    • Nếu ứng dụng của bạn sử dụng từ điển động hoặc từ điển từ xa, hãy chạy các bài kiểm tra trong môi trường mà các từ điển đó có sẵn.
    • Đối với các monorepo hỗn hợp, sử dụng --base-dir để chỉ CLI đến đúng thư mục gốc của ứng dụng.

    Tự động điền
    Tối ưu hóa gói
    Alt+→

    Trong trang này

      Các cuộc thảo luận là ẩn danh và được xem xét thường xuyên để giải quyết các vấn đề phổ biến. Hãy thoải mái chia sẻ ý tưởng tính năng, phản hồi về tài liệu hoặc bất cứ điều gì liên quan đến Intlayer, chúng tôi sử dụng thông tin này để định hình lộ trình và cải thiện sản phẩm.

      npx intlayer content test
      /* @vitest-environment node */import { listMissingTranslations } from "intlayer/cli";import { describe, expect, it } from "vitest";describe("translations", () => {  it("has no missing required locales", async () => {    const result = await listMissingTranslations();    if (result.missingRequiredLocales.length > 0) {      // Hữu ích khi test thất bại cục bộ hoặc trong CI      console.log(result.missingTranslations);    }    expect(result.missingRequiredLocales).toHaveLength(0);  });});
      import { listMissingTranslations } from "intlayer/cli";test("không có locale bắt buộc nào bị thiếu", async () => {  const result = await listMissingTranslations();  if (result.missingRequiredLocales.length > 0) {    // Hữu ích khi test thất bại ở local hoặc trong CI    console.log(result.missingTranslations);  }  expect(result.missingRequiredLocales).toHaveLength(0);});
      import { IntlayerProvider } from "react-intlayer/client";import { render, screen } from "@testing-library/react";import { MyComponent } from "./MyComponent";test("hiển thị tiêu đề bản địa hóa bằng tiếng Anh", () => {  render(    <IntlayerProvider locale="en-US">      <MyComponent />    </IntlayerProvider>  );  expect(screen.getByText("Expected English title")).toBeInTheDocument();});
      import { IntlayerClientProvider } from "next-intlayer/client";import { render, screen } from "@testing-library/react";import { MyPage } from "./MyPage";test("hiển thị tiêu đề bản địa hóa bằng tiếng Pháp", () => {  render(    <IntlayerClientProvider locale="fr-FR">      <MyPage />    </IntlayerClientProvider>  );  expect(    screen.getByRole("heading", { name: "Titre attendu" })  ).toBeInTheDocument();});
      {  "scripts": {    "test:i18n": "vitest run -c"  }}
      name: CIon: [push, pull_request]jobs:  test:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v4      - uses: actions/setup-node@v4        with:          node-version: 20      - run: npm ci      - run: npm run test:i18n
      npx intlayer content test --verbose