kanban/test/all.spec.js

69 lines
2.3 KiB
JavaScript
Raw Normal View History

import { test, expect } from '@playwright/test';
test.describe('Kanban Engine', () => {
test.beforeEach(async ({ page }) => {
await page.goto('http://127.0.0.1:5173/test/index.html');
});
test('should render columns and items correctly', async ({ page }) => {
const kanban = page.locator('web-kanban');
await expect(kanban).toBeVisible();
const columns = kanban.locator('.column');
await expect(columns).toHaveCount(3);
const items = kanban.locator('.item');
await expect(items).toHaveCount(3);
});
test('should handle drag and drop between columns', async ({ page }) => {
const kanban = page.locator('web-kanban');
// Get initial counts
const todoColumn = kanban.locator('.column[data-id="todo"] .items-container');
const doneColumn = kanban.locator('.column[data-id="done"] .items-container');
await expect(todoColumn.locator('.item')).toHaveCount(2);
await expect(doneColumn.locator('.item')).toHaveCount(0);
// Perform drag and drop
const firstItem = todoColumn.locator('.item').first();
await firstItem.dragTo(doneColumn);
// Verify counts after move
await expect(todoColumn.locator('.item')).toHaveCount(1);
await expect(doneColumn.locator('.item')).toHaveCount(1);
// Verify @update event was triggered (check console if needed, but here we check DOM)
const movedItem = doneColumn.locator('.item');
await expect(movedItem).toContainText('设计看板原型');
});
test('should measure render performance', async ({ page }) => {
const start = await page.evaluate(() => performance.now());
await page.evaluate(() => {
const kanban = document.getElementById('kanban');
const largeData = [];
for (let i = 0; i < 10; i++) {
largeData.push({
id: `col-${i}`,
title: `Column ${i}`,
items: Array.from({ length: 20 }, (_, j) => ({
id: `item-${i}-${j}`,
content: `Item ${i}-${j}`
}))
});
}
kanban.data = largeData;
});
const end = await page.evaluate(() => performance.now());
const duration = end - start;
console.log(`Render 10 columns with 200 items took: ${duration.toFixed(2)}ms`);
// Expect reasonable performance
expect(duration).toBeLessThan(100);
});
});