Jest - 部署和 CI/CD

在本章中,我们将向您展示如何将 Jest 测试添加到您的持续集成 (CI)持续部署 (CD)管道中。这有助于在不同的环境中自动运行测试,因此您可以更快、更可靠地发布代码。我们将涵盖的主题包括:

Jest - 持续集成

持续集成 (CI) 是指开发人员定期将代码提交到共享存储库。目标是通过在将代码添加到主代码库时运行测试来尽早发现错误。通过将 Jest 与您的 CI 管道集成,您可以自动运行测试以验证您的代码在每次更改后是否按预期工作。以下是将 Jest 与 CI 集成的步骤。

为 CI 设置 Jest

将 Jest 集成到您的 CI 管道,您首先需要确保您的项目已正确配置 Jest。确保:

  • Jest 作为开发依赖项安装:运行以下命令安装 Jest:
  • npm install --save-dev jest
    
  • 您的测试脚本在 package.json 中定义:在您的 package.json 中,添加一个 test 脚本来运行 Jest:
  • "scripts": {
        "test": "jest"
    }
    

在 CI 中运行 Jest

持续集成 (CI) 系统(如 Jenkins、Travis CI、GitHub Actions 和 GitLab CI)会自动检测您的测试脚本,并在将新提交推送到存储库时运行它们。

要在 CI 服务器中运行 Jest,您通常会使用此命令来执行测试并生成测试报告:

npm run test -- --ci --coverage

为 Jest 配置 CI

大多数 CI 平台都支持与 Jest 轻松集成。以下是 Travis CI 等平台的示例配置。

  • 创建 .travis.yml 文件来定义构建过程:
  • language: node_js
    node_js:
      - "14"  # Use Node.js version 14
    install:
      - npm install  # Install dependencies
    script:
      - npm run test  # Run Jest tests
    

    在此示例中,每当您将代码推送到 Git 存储库 时,Jest 都会自动运行。

针对 CI 优化 Jest

为了使 Jest 在 CI 环境中运行得更快、更高效,您可以应用以下优化:

  • 并行性:Jest 默认并行运行测试,从而加快测试过程。您可以通过设置 ma​​xWorkers 选项来控制 Jest 使用的工作线程数。
  • "jest": {
        "maxWorkers": "50%" # 限制为可用 CPU 的 50%
    }
    
  • 禁用监视模式:由于 CI 环境不需要监视文件更改,因此请确保默认情况下禁用 Jest 的监视模式。 --ci 标志会自动禁用监视模式。
  • npm run test -- --ci // 自动禁用监视模式
    
  • 测试覆盖率报告:启用代码覆盖率报告以跟踪测试对代码库的覆盖程度。 Jest 可以生成不同格式的报告,例如 lcovjsontext
  • npm run test -- --coverage // 生成覆盖率报告
    

通过应用这些优化,您的 Jest 测试将在 CI 管道 中运行得更快、更可靠。

Jest - GitHub Actions

GitHub Actions 是一项 持续集成持续部署 (CI/CD) 服务,可让您直接在 GitHub 中自动执行测试、构建和部署代码等任务。您可以集成 Jest,以便在将代码推送到存储库时自动运行测试。

将 Jest 与 GitHub Actions 集成的步骤

  • 创建 GitHub Actions 工作流文件:在您的 GitHub 存储库中,如果尚不存在名为 .github/workflows 的目录,请创建该目录。在此目录中,为您的工作流创建一个文件(例如 jest-tests.yml)。
  • 定义工作流:工作流文件中,定义设置环境、安装依赖项和运行 Jest 测试的步骤。以下是在 GitHub Actions 上运行 Jest 测试的工作流示例:
  • name: Run Jest Tests
    
    on:
      push:
        branches:
          - main  # Run on push to the 'main' branch
      pull_request:
        branches:
          - main  # Run on pull requests targeting 'main' branch
    
    jobs:
      test:
        runs-on: ubuntu-latest  # Run on the latest Ubuntu runner
    
        steps:
          - name: Checkout code
            uses: actions/checkout@v2  # Get the latest code from the repository
    
          - name: Set up Node.js
            uses: actions/setup-node@v2
            with:
              node-version: '14'  # Use Node.js version 14
    
          - name: Install dependencies
            run: npm install  # Install project dependencies
    
          - name: Run Jest tests
            run: npm run test -- --ci --coverage  # Run tests with coverage reporting
    
  • 运行工作流:设置工作流文件后,将其推送到您的 GitHub 存储库。每当对存储库推送更改或拉取请求时,GitHub Actions 将自动检测文件并开始运行测试。
  • 监控测试结果:运行测试后,您可以直接在 GitHub Actions 中查看结果。转到 GitHub 存储库中的"操作"选项卡,查看每个提交或拉取请求的测试状态。

Jest - 部署策略

确认您的代码适用于 Jest 测试后,下一步是部署。本节介绍如何将 Jest 测试添加到您的部署管道,以确保在将代码部署到生产环境之前运行测试。

部署策略的类型

以下是您可以用来发布应用程序的常见部署策略:

  • 部署前测试:在部署应用程序之前,运行 Jest 测试以确保一切按预期运行非常重要。此步骤在任何部署策略中都很重要,可以尽早发现错误并避免生产中出现问题。
  • 自动部署 (CI/CD):在 CI/CD(持续集成/持续部署) 中,您的测试和部署过程是自动化的。Jest 测试成功通过后,您的新代码将自动部署。这种方法可以加快发布过程,同时确保代码稳定。
  • 手动部署(带测试):手动部署允许您控制新代码的上线时间和方式。但是,在部署代码之前,您仍需要运行 Jest 测试以确保一切稳定且无错误。
  • A/B 测试部署:A/B 测试涉及向不同的用户组发布应用的两个版本(版本 A 和版本 B)以比较性能。在决定保留哪个版本之前,会对两个版本运行 Jest 测试以确保它们正常运行。
  • 重新创建部署:重新创建部署意味着用新版本替换应用的当前版本。在切换之前,您需要对新版本运行 Jest 测试以确认其正常运行。
  • 金丝雀发布:金丝雀发布首先将应用的新版本部署给一小部分用户。在将新版本发布给更多受众之前,会对新版本运行 Jest 测试以发现任何错误。如果通过测试,该版本将推广给更多用户。
  • 影子部署(暗发布):影子部署(也称为暗发布)是指您发布应用的新版本但不向用户公开。 Jest 测试在后台运行,以确保新版本在上线之前正常运行。
  • 蓝绿部署:在蓝绿部署中,您有两个相同的环境:一个用于当前版本(蓝色),另一个用于新版本(绿色)。在将用户切换到绿色环境之前,Jest 测试会在绿色环境上运行,确保生产中不会出现停机或问题。
  • 持续部署 (CD):使用持续部署,新代码每次通过 Jest 测试时都会自动部署。Jest 测试是管道的关键部分,因此只会发布经过测试的稳定代码。此方法可帮助团队更快地发布功能。

如何在 Jest 中选择正确的部署策略?

选择正确的部署策略取决于您的项目需求。考虑以下因素:

  • 项目规模和复杂性:对于依赖关系较少的小型项目,蓝绿部署滚动部署等更简单的策略可能会很有效。具有更复杂要求的大型项目可以从金丝雀部署A/B 测试等高级策略中受益。
  • 可用性和可扩展性需求:如果您的应用程序需要处理高流量,或者您需要快速更新的能力,支持滚动更新的策略将会很有帮助。
  • 可用资源:如果您的团队规模较小或缺乏高级策略经验,请选择更简单、更易于管理和维护的部署方法。
  • 对用户的影响:确保选择一种部署策略,以最大限度地减少停机时间并确保用户在更新期间获得流畅的体验。

使用 Jest 进行部署的最佳实践

要实现顺利部署,请遵循以下集成 Jest 测试的最佳实践:

  • 在部署之前运行 Jest 测试部署:始终在部署过程中包含 Jest 测试,无论是自动还是手动,以便尽早发现问题。
  • 部署后监控:即使在 Jest 测试通过后,也要密切关注生产中的应用,以发现任何意外问题。
  • 优化 Jest 以加快执行速度:在 CI/CD 设置中,确保 Jest 测试快速运行以避免部署过程延迟。
  • 为您的部署策略配置 Jest:调整 Jest 设置以适合您的部署方法,例如 CanaryA/B 测试,以获得更好的结果。