logo
  • 指南
  • 配置
  • 插件
  • API
  • 示例
  • 社区
  • Modern.js 2.x 文档
  • 简体中文
    • 简体中文
    • English
    • 开始
      介绍
      快速上手
      版本升级
      名词解释
      技术栈
      核心概念
      页面入口
      构建工具
      Web 服务器
      基础功能
      路由
      路由基础
      配置式路由
      数据管理
      数据获取
      数据写入
      数据缓存
      渲染
      服务端渲染(SSR)
      服务端流式渲染(Streaming SSR)
      渲染缓存
      静态站点生成(SSG)
      渲染预处理 (Render Preprocessing)
      样式开发
      引入 CSS
      使用 CSS Modules
      使用 CSS-in-JS
      使用 Tailwind CSS
      HTML 模板
      引用静态资源
      引用 JSON 文件
      引用 SVG 资源
      引用 Wasm 资源
      调试
      数据模拟(Mock)
      网络代理
      使用 Rsdoctor
      使用 Storybook
      测试
      Playwright
      Vitest
      Jest
      Cypress
      路径别名
      环境变量
      构建产物目录
      部署应用
      进阶功能
      使用 Rspack
      使用 BFF
      基础用法
      运行时框架
      扩展 BFF Server
      扩展一体化调用 SDK
      文件上传
      跨项目调用
      优化页面性能
      代码分割
      静态资源内联
      产物体积优化
      React Compiler
      提升构建性能
      浏览器兼容性
      配置底层工具
      源码构建模式
      服务端监控
      Monitors
      日志事件
      指标事件
      国际化
      基础概念
      快速开始
      配置说明
      语言检测
      资源加载
      路由集成
      API 参考
      高级用法
      最佳实践
      自定义 Web Server
      专题详解
      模块联邦
      简介
      开始使用
      应用级别模块
      服务端渲染
      部署
      集成国际化能力
      常见问题
      依赖安装问题
      命令行问题
      构建相关问题
      热更新问题
      已下线功能
      📝 编辑此页面
      上一页使用 Storybook下一页Vitest

      #Playwright

      Playwright 是一个测试框架,它允许你使用单一的 API,自动的在 Chromium、Firefox 和 WebKit 环境中运行测试用例,你可以使用它来编写 E2E 测试。

      在 Modern.js 中使用 Playwright 需要先安装依赖,可以执行以下命令:

      npm
      yarn
      pnpm
      npm init playwright
      yarn create playwright
      pnpm create playwright

      上述命令会自动安装 Playwright 依赖,并通过一系列提示帮助你在项目中安装和配置,包括添加一个 playwright.config.ts 文件。

      Info

      参考 Playwright 官方文档,安装 Playwright 查阅更详细的指南。

      按照默认配置创建后,可以在项目中看到以下文件:

      tests/example.spec.ts
      import { test, expect } from '@playwright/test';
      
      test('has title', async ({ page }) => {
        await page.goto('https://playwright.dev/');
      
        // Expect a title "to contain" a substring.
        await expect(page).toHaveTitle(/Playwright/);
      });
      
      test('get started link', async ({ page }) => {
        await page.goto('https://playwright.dev/');
      
        // Click the get started link.
        await page.getByRole('link', { name: 'Get started' }).click();
      
        // Expects page to have a heading with the name of Installation.
        await expect(
          page.getByRole('heading', { name: 'Installation' }),
        ).toBeVisible();
      });

      这是默认的测试文件,现在创建一些新的页面,并测试它们。

      #创建 E2E 测试

      首先创建两张 Modern.js 的页面。

      routes/page.tsx
      import { Link } from '@modern-js/runtime/router';
      
      const Index = () => (
        <div>
          <h1>Home</h1>
          <Link to="/about">About</Link>
        </div>
      );
      
      export default Index;
      routes/about/page.tsx
      import { Link } from '@modern-js/runtime/router';
      
      const Index = () => (
        <div>
          <h1>About</h1>
          <Link to="/">Home</Link>
        </div>
      );
      
      export default Index;

      接下来,添加测试用例,来保证你页面的链接能够正常工作。

      tests/example.spec.ts
      import { test, expect } from '@playwright/test'
       
      test('should navigate to the about page', async ({ page }) => {
        // Start from the index page (the baseURL is set via the webServer in the playwright.config.ts)
        await page.goto('http://localhost:8080/')
        // Find an element with the text 'About' and click on it
        await page.click('text=About')
        // The new URL should be "/about" (baseURL is used there)
        await expect(page).toHaveURL('http://localhost:8080/about')
        // The new page should contain an h1 with "About"
        await expect(page.locator('h1')).toContainText('About')
      })

      #运行测试用例

      Playwright 需要你的 Modern.js 服务器保持运行。我们推荐在生产环境产物下运行你的测试用例,你可以执行 pnpm run build 和 pnpm run serve 在本地模拟生产环境。

      info    Starting production server...
      
        > Local:    http://localhost:8080/
        > Network:  http://10.94.59.30:8080/

      当项目正常构建运行后,可以在另一个终端内执行 npx playwright test,运行 Playwright 用例:

      Running 3 tests using 3 workers
        3 passed (2.0s)
      
      To open last HTML report run:
      
        npx playwright show-report