Files
boundless/playwright.config.ts
T
吴璨 fad9760265 自部署多端同步:服务端、实时协作、口令登录与油画加载动画
- 新增 Node 服务端(Hono + Hocuspocus + node:sqlite),数据保存在服务器
- 基于 Yjs 的多端实时同步,本机 IndexedDB 离线缓存,撤销只针对本机操作
- 空间(标签)有独立地址,增删改通过接口同步到所有设备
- 口令登录(签名 Cookie 会话、登录限流、同源校验)
- 图片上传到服务器,过大照片上传前自动压缩
- 历史版本(自动/手动保存、一键恢复)、跨空间搜索、在线设备
- 随机油画加载动画(Painting Loaders,本地收录 p5 / p5.brush)
- 选中样式与拖拽性能优化:拖动结束后才同步位置
- Docker / docker-compose 部署,README 与 CLAUDE.md 更新
2026-10-21 18:09:03 +08:00

63 lines
1.6 KiB
TypeScript

import process from 'node:process'
import { defineConfig, devices } from '@playwright/test'
import { E2E_PASSWORD } from './e2e/helpers'
// e2e 跑的是生产构建 + 真实服务端,使用独立的临时数据目录
const PORT = 4174
/**
* See https://playwright.dev/docs/test-configuration.
*/
export default defineConfig({
testDir: './e2e',
timeout: 45 * 1000,
expect: {
timeout: 8000,
},
fullyParallel: false,
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
// 所有用例共用一个服务端和数据目录,串行执行更可靠
workers: 1,
reporter: process.env.CI ? 'github' : 'list',
use: {
baseURL: `http://localhost:${PORT}`,
trace: 'on-first-retry',
// 默认跳过加载动画,专门的用例会单独打开
contextOptions: { reducedMotion: 'reduce' },
locale: 'zh-CN',
},
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
],
webServer: {
command:
'node -e "require(\'fs\').rmSync(\'.e2e-data\',{recursive:true,force:true})" && npm run build-only && npm run start',
url: `http://localhost:${PORT}/healthz`,
reuseExistingServer: false,
timeout: 180 * 1000,
env: {
PORT: String(PORT),
DATA_DIR: '.e2e-data',
BOUNDLESS_PASSWORD: E2E_PASSWORD,
BOUNDLESS_SECRET: 'e2e-secret',
},
},
})