【前端】如何在 Next.js 中进行测试并配置 CI/CD

news2024/11/5 16:36:19

在 Next.js 中进行测试并配置 CI/CD(持续集成和持续部署)是保证应用质量和自动化发布流程的重要环节。下面我将详细介绍如何在 Next.js 项目中进行单元测试、集成测试和端到端测试,并配置 CI/CD 流程。

1. 设置测试环境

单元测试与集成测试
  • Jest: Jest 是一个流行的 JavaScript 测试框架,支持单元测试和集成测试。
  1. 安装 Jest 和相关依赖

    npm install --save-dev jest @testing-library/react @testing-library/jest-dom @testing-library/user-event
    
  2. 配置 Jest

    在项目根目录下创建或修改 jest.config.js

    module.exports = {
      preset: 'ts-jest',
      testEnvironment: 'jsdom',
      setupFilesAfterEnv: ['<rootDir>/setupTests.js'],
      moduleNameMapper: {
        '\\.(css|less|scss|sass)$': '<rootDir>/__mocks__/styleMock.js',
        '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '<rootDir>/__mocks__/fileMock.js',
      },
    };
    
  3. 编写测试

    创建一个测试文件,例如 components/Button.test.js

    import { render, screen, fireEvent } from '@testing-library/react';
    import '@testing-library/jest-dom';
    import Button from './Button';
    
    describe('Button component', () => {
      it('renders correctly', () => {
        render(<Button />);
        expect(screen.getByText('Click me')).toBeInTheDocument();
      });
    
      it('calls the onClick prop when clicked', () => {
        const handleClick = jest.fn();
        render(<Button onClick={handleClick} />);
        fireEvent.click(screen.getByText('Click me'));
        expect(handleClick).toHaveBeenCalled();
      });
    });
    
  4. 运行测试

    package.json 中添加一个测试脚本:

    "scripts": {
      "test": "jest"
    }
    

    运行测试:

    npm run test
    
端到端测试
  • Cypress: Cypress 是一个现代的端到端测试框架,非常适合测试 Next.js 应用。
  1. 安装 Cypress

    npm install --save-dev cypress
    
  2. 编写端到端测试

    cypress/integration 目录下创建测试文件,例如 example.spec.js

    describe('Home page', () => {
      it('displays a welcome message', () => {
        cy.visit('/');
        cy.contains('Welcome');
      });
    
      it('has a link to the about page', () => {
        cy.get('a[href="/about"]').should('exist');
      });
    });
    
  3. 运行端到端测试

    运行 Cypress 测试:

    npx cypress open
    

2. 配置 CI/CD

GitHub Actions

GitHub Actions 是一种流行的 CI/CD 解决方案,可以无缝集成到 GitHub 仓库中。

  1. 创建 CI/CD 工作流程

    .github/workflows 目录下创建一个 YAML 文件,例如 ci.yml

    name: CI/CD Pipeline
    
    on:
      push:
        branches:
          - main # 主分支名称可以根据实际情况修改
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v2
          - name: Setup Node.js environment
            uses: actions/setup-node@v2
            with:
              node-version: 16 # 根据需要选择 Node.js 版本
    
          - name: Install dependencies
            run: npm ci
    
          - name: Run tests
            run: npm run test
    
          - name: Build application
            run: npm run build
    
      deploy:
        needs: build
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v2
          - name: Deploy to production
            env:
              NEXT_PUBLIC_VERCEL_URL: ${{ secrets.NEXT_PUBLIC_VERCEL_URL }}
              VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
            run: |
              npx vercel --prod
    
  2. 配置 Vercel 部署密钥

    在 GitHub 仓库的 Settings -> Secrets -> Actions 中添加 NEXT_PUBLIC_VERCEL_URLVERCEL_TOKEN

Vercel

Vercel 是一个广泛使用的部署平台,可以直接从 GitHub 仓库部署 Next.js 应用。

  1. 连接 GitHub 仓库

    登录 Vercel 控制台,连接你的 GitHub 账号,并选择要部署的仓库。

  2. 配置部署设置

    在 Vercel 控制台中为项目配置构建命令和输出目录:

    • Build Command: npm run build
    • Output Directory: .next
  3. 自动部署

    Vercel 支持通过 Git Hook 或者 GitHub Actions 自动部署。确保你的 GitHub 仓库中的 .github/workflows/ci.yml 文件正确配置了 Vercel 部署命令。

总结

通过上述步骤,你可以在 Next.js 项目中设置单元测试、集成测试和端到端测试,并配置 CI/CD 流程。这有助于确保应用的质量,并实现自动化发布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2231658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++篇】跨越有限与无限的边界:STL之set容器中的自我秩序与无限可能

文章目录 C set 容器详解&#xff1a;秩序与高效的数据管理前言第一章&#xff1a;C set 的概念1.1 set 的定义1.2 set 的特点 第二章&#xff1a;set 的构造方法2.1 常见构造函数2.1.1 示例&#xff1a;不同构造方法 2.2 相关文档 第三章&#xff1a;set 的常用操作3.1 插入操…

Java求最值 C语言二维数组与指针

1. public static void main(String[] args) {int []arr{11,22,33,44,55,66};int maxarr[0];//arr[0]为索引值 若一开始为0&#xff1b;数组全是负数就会错误for (int i 1; i < arr.length; i) {if (arr[i]>max){maxarr[i];}}System.out.println(max); }//循环开始条件…

微服务设计模式 - 断路器模式 (Circuit Breaker Pattern)

微服务设计模式 - 断路器模式 (Circuit Breaker Pattern) 定义 断路器模式&#xff08;Circuit Breaker Pattern&#xff09;是云计算和微服务架构中的一种保护性设计模式&#xff0c;其目的是避免系统中的调用链出现故障时&#xff0c;导致系统瘫痪。通过断路器模式&#xff…

PG数据库 jsonb字段 模糊查询

背景&#xff1a; 项目由于多语言的设计&#xff0c;将字段设置成json字段类型&#xff0c;同时存储中文和英文 页面上通过输入框实现模糊的查询 一、表结构&#xff1a;name字段设置jsonb类型 二、表数据 3、Mybatis编写sql select pp.name ->>zh-CN as pmsProductNam…

OpenCV—calcHist()函数

void calcHist( const Mat* images, int nimages,const int* channels, InputArray mask,SparseMat& hist, int dims,const int* histSize, const float** ranges,bool uniform true, bool accumulate false ); images 输入的数据指针&#xff0c;要具备相同的尺寸和数…

《Python网络安全项目实战》项目2 Python基础练习

《Python网络安全项目实战》项目2 Python基础练习 项目2 Python基础练习任务2.1 使用数据类型2.1.1 输出2.1.2 输入2.1.3 数字2.1.4 字符串 相关知识 任务评价 任务拓展 任务2.2 使用组合数据类型2.2.1 列表2.2.2 元组2.2.3 集合2.2.4 字典 相关知识 任务评价 任务…

less解决function中return写法在浏览器被识别成Object导致样式失败的问题

问题描述&#xff1a; 一开始写的是: baseFontSize: 37.5px;//基于屏幕尺寸/10得出的基准font-size// return失败,浏览器显示为[object Object],[object Object] .pxToRem(px){value: px / baseFontSize * 1rem;return value; } 使用height: .pxToRem(40px);之后浏览器却是这…

安装中文版 Matlab R2022a

下载安装包 压缩包有点大&#xff0c;大概20G 百度网盘&#xff1a;下载链接 提取码&#xff1a;rmja 安装 解压后打开目录&#xff0c;右键以管理员身份运行 setup.exe 选择输入安装秘钥 输入秘钥&#xff1a; 50874-33247-14209-37962-45495-25133-28159-33348-18070-6088…

Linux云计算 |【第五阶段】CLOUD-DAY9

主要内容&#xff1a; Metrics资源利用率监控、存储卷管理&#xff08;临时卷ConfitMap、EmptyDir、持久卷HostPath、NFS(PV/PVC)&#xff09; 一、Metrics介绍 metrics是一个监控系统资源使用的插件&#xff0c;可以监控Node节点上的CPU、内存的使用率&#xff0c;或Pod对资…

sql数据库数据修改与删除-DML

目录 修改数据 同时修改两个数据 修改表中所有数据 删除数据 删除指定字段的值&#xff08;用UPDATE&#xff09; 删除整张表的数据 举例表如下FIRST表 修改数据 UPDATE 表名 SET 字段名1值1,字段名2值2,...[WHERE 条件]; 将first表name字段张三修改为张三丰。 UPDA…

Oracle视频基础1.3.5练习

Oracle视频基础1.3.4练习 1.3.5 检查数据库启动状态 ps -ef | grep oracle ipcs clear演示alter向前向后改database阶段 sqlplus /nolog conn / as sysdba startup mount alter database nomount # 报错 alter database open启动restricted mode&#xff0c;创建一个connect&…

MySQL数据库迁移到DM8数据库

1. 达梦新建zsaqks库 2. 打开DM数据迁移工具 3. 新建工程 4. 迁移 - 右击 - 新建迁移 下一步 5. 选择迁移方式 6. MySQL数据源 请输入MySQL数据库信息 7. DM数据库目的 请输入达梦数据库信息 8. 迁移选项 保持对象名大小写(勾选) 9. 指定模式 指定是从数据源复制对象。 10.…

如何在Linux系统中使用Ansible进行自动化部署

如何在Linux系统中使用Ansible进行自动化部署 Ansible简介 安装Ansible 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动Ansible服务 Ansible基本概念 Inventory Playbook Module 配置Ansible 测试Ansible配置 执行Ansible Playbook Ansible模块 文件模块 包管理模块…

爬虫学习2

数据解析 正则表达式 量词&#xff1a; import re#searcch只会匹配到第一次匹配的内容#result re.search(r"\d","今年32")#print(result.group()) #result re.findall(r"\d","我是一个abcdeafg") #print(result)#search只会匹配到第…

初步认识Java,及使用

JAVA 特点 简单性 面向对象 分布式 健壮性 安全性 体系结构中立&#xff08;平台无关&#xff09; 可移植性 解释执行 高性能 多线程 动态 发展史 JDK&#xff0c;Eclipse下载&#xff0c;…

牛客sql题目总结(1)

1.第N高的薪水 AC: create function getnthhighestsalary(n int) returns int begindeclare m int; set m n - 1; return (select distinct salaryfrom employeeorder by salary desclimit m, 1); end 2. 3. 4. 5. 6.

Pr 视频效果:ASC CDL

视频效果/颜色校正/ASC CDL Color Correction/ASC CDL ASC CDL ASC CDL效果通过对红、绿、蓝三个原色通道的独立调整&#xff0c;实现对图像色彩的精确控制。在此基础上&#xff0c;还可用于调整处理后图像的整体饱和度。 ◆ ◆ ◆ 效果选项说明 斜率 Slope、偏移 Offset和功…

开源OCR免费助力法律文档数字化,提升文档管理效率

一、在法律行业&#xff0c;每天需要处理大量纸质文件&#xff0c;从合同到判决书&#xff0c;手动录入不仅费时&#xff0c;还容易出错。为解决这一问题推出了一款免费开源的OCR智能识别平台&#xff0c;通过先进的光学字符识别&#xff08;OCR&#xff09;技术&#xff0c;将…

RAG流程

目录 1. 前言2. 流程详解2.1 知识管理2.1.1 知识存储【未展开】2.1.2 知识加载(1) docx(2) pdf 2.2 切分2.2.1 固定长度分割2.2.2 自己写的固定分块方法 2.3 创建知识库的向量库2.4 检索2.5 模型部署和加载&#xff08;1&#xff09;api生成&#xff08;2&#xff09;Transform…

JeecgBoot入门

最近在了解低代码平台&#xff0c;其中关注到gitee上开源项目JeecgBoot&#xff0c;JeecgBoot官方也有比较完整的入门教学文档&#xff0c;这里我们将耕者官方教程学习&#xff0c;并将其记录下来。 一、项目简介 JeecgBoot 是一款基于代码生成器的低代码开发平台拥有零代码能力…