You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rollup打包React组件库配置Cypress组件测试时如何返回自定义DevServer实例

为Rollup打包的React组件库配置Cypress组件测试

由于Cypress仅内置支持Webpack/Vite的自动配置,使用Rollup时需要手动实现符合要求的DevServer实例,以下是具体实现步骤:

1. 安装依赖

安装Rollup开发服务及React编译相关的插件:

npm install --save-dev rollup-plugin-serve rollup-plugin-livereload @rollup/plugin-react @rollup/plugin-node-resolve @rollup/plugin-commonjs

2. 编写自定义Rollup DevServer逻辑

在项目根目录创建cypress-rollup-dev-server.js,实现Cypress要求的DevServer接口:

const rollup = require('rollup');
const serve = require('rollup-plugin-serve');
const livereload = require('rollup-plugin-livereload');
const react = require('@rollup/plugin-react');
const resolve = require('@rollup/plugin-node-resolve');
const commonjs = require('@rollup/plugin-commonjs');
const path = require('path');

module.exports = async function createRollupDevServer(cypressConfig) {
  // 定义适配Cypress的Rollup配置
  const rollupConfig = {
    input: path.resolve(__dirname, 'cypress/support/component-index.js'),
    plugins: [
      resolve(),
      commonjs(),
      react({ jsxRuntime: 'automatic' }),
      serve({
        port: cypressConfig.devServerPort || 2000,
        contentBase: [path.resolve(__dirname, 'cypress/component'), path.resolve(__dirname, 'dist')],
        open: false,
      }),
      livereload({
        watch: path.resolve(__dirname, 'cypress/component'),
      }),
    ],
    output: {
      file: path.resolve(__dirname, 'dist/cypress-component-bundle.js'),
      format: 'iife',
      sourcemap: 'inline',
    },
  };

  // 初始化Rollup构建与监听
  const bundle = await rollup.rollup(rollupConfig);
  await bundle.write(rollupConfig.output);
  const watcher = rollup.watch(rollupConfig);

  // 返回符合Cypress规范的DevServer实例
  return {
    listen: (port = cypressConfig.devServerPort || 2000) => Promise.resolve({ port }),
    close: () => {
      watcher.close();
      return bundle.close();
    },
  };
};

3. 创建Cypress组件测试入口

在cypress/support目录下新建component-index.js,用于加载全局资源:

import './commands';
// 引入组件库全局样式(如果有)
// import '../../src/index.css';

4. 配置Cypress主文件

修改cypress.config.js,接入自定义DevServer:

const { defineConfig } = require('cypress');
const createRollupDevServer = require('./cypress-rollup-dev-server');

module.exports = defineConfig({
  component: {
    devServer: async (cypressConfig) => createRollupDevServer(cypressConfig),
    specPattern: 'cypress/component/**/*.cy.jsx',
  },
});

5. 编写组件测试示例

在cypress/component目录下创建测试文件,比如Button.cy.jsx:

import React from 'react';
import { mount } from '@cypress/react';
import Button from '../../src/components/Button';

describe('Button Component', () => {
  it('renders button with correct label', () => {
    mount(<Button label="Test Button" />);
    cy.get('button').should('have.text', 'Test Button');
  });
});

注意事项

  • 若组件库使用特殊Rollup插件(如样式处理插件),需将其添加到rollupConfig.plugins中
  • 可根据项目目录结构调整配置中的路径参数
  • cypressConfig.devServerPort用于避免端口冲突,优先使用Cypress指定的端口

内容的提问来源于stack exchange,提问作者Akshay Vijay Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:48:15