-
-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add e2e and unit test #307
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
pages |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,53 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { BlinnPhongMaterial, Camera, MeshRenderer, PrimitiveMesh, Vector3, WebGLEngine } from "@galacean/engine"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { Gizmo, Group, State } from "@galacean/engine-toolkit"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { PhysXPhysics } from "@galacean/engine-physics-physx"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
document.addEventListener("pointerdown", (e) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
console.log("pointer down", e); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
document.addEventListener("pointermove", (e) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
console.log("pointer move", e); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WebGLEngine.create({ canvas: "canvas", physics: new PhysXPhysics() }).then((engine) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
engine.canvas.resizeByClientSize(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const scene = engine.sceneManager.activeScene; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const rootEntity = scene.createRootEntity(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// init camera | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const cameraEntity = rootEntity.createChild("camera"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const camera = cameraEntity.addComponent(Camera); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const pos = cameraEntity.transform.position; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pos.set(10, 10, 10); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cameraEntity.transform.position = pos; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cameraEntity.transform.lookAt(new Vector3(0, 0, 0)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Initialize group for selection | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const group = new Group(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// add gizmo | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const gizmoEntity = rootEntity.createChild("editor-gizmo"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const gizmo = gizmoEntity.addComponent(Gizmo); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
gizmo.init(camera, group); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
gizmo.state = State.translate; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// init light | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
scene.ambientLight.diffuseSolidColor.set(1, 1, 1, 1); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
scene.ambientLight.diffuseIntensity = 1.2; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// init cube | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const cubeEntity = rootEntity.createChild("cube"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const renderer = cubeEntity.addComponent(MeshRenderer); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const mtl = new BlinnPhongMaterial(engine); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const color = mtl.baseColor; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.r = 0.0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.g = 0.8; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.b = 0.5; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color.a = 1.0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+43
to
+47
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Simplify color assignment by using the Instead of setting each color component individually, you can use the Apply this diff to simplify the color assignment: const color = mtl.baseColor;
-color.r = 0.0;
-color.g = 0.8;
-color.b = 0.5;
-color.a = 1.0;
+color.set(0.0, 0.8, 0.5, 1.0); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
renderer.mesh = PrimitiveMesh.createCuboid(engine); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
renderer.setMaterial(mtl); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
group.addEntity(cubeEntity); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
engine.run(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+13
to
+53
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add error handling for the promise returned by Currently, if Apply this diff to add error handling: WebGLEngine.create({ canvas: "canvas", physics: new PhysXPhysics() }).then((engine) => {
// existing code...
engine.run();
+}).catch((error) => {
+ console.error("Failed to create WebGLEngine:", error);
+}); 📝 Committable suggestion
Suggested change
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
|
||
<head> | ||
<meta charset="UTF-8" /> | ||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
<title>Galacean App</title> | ||
<style> | ||
canvas { | ||
position: fixed; | ||
overflow: hidden; | ||
} | ||
</style> | ||
</head> | ||
<body style="margin: 0; padding: 0"> | ||
<canvas id="canvas" style="width: 100vw; height: 100vh"></canvas> | ||
<script type="module" src="$$src$$"></script> | ||
</body> | ||
</html> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
{ | ||
"name": "@galacean/toolkit-e2e", | ||
"private": "true", | ||
"type": "module", | ||
"version": "0.0.0", | ||
"scripts": { | ||
"dev": "vite", | ||
"build": "vite build", | ||
"serve": "vite preview", | ||
"e2e": "vite-node test.ts" | ||
}, | ||
"devDependencies": { | ||
"ts-node": "^10", | ||
"vite": "^5", | ||
"vite-node": "^2.0.5" | ||
}, | ||
"dependencies": { | ||
"@galacean/engine": "^1.3.0", | ||
"@galacean/engine-physics-physx": "^1.3.0", | ||
"@galacean/engine-toolkit": "workspace:*" | ||
} | ||
} |
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,34 @@ | ||||||||||
import path from "path"; | ||||||||||
import { createServer } from "vite"; | ||||||||||
import playwright from "playwright"; | ||||||||||
import fs from "fs"; | ||||||||||
|
||||||||||
const browser = await playwright.chromium.launch({ | ||||||||||
headless: false | ||||||||||
}); | ||||||||||
|
||||||||||
async function runTests() { | ||||||||||
const server = await createServer({ | ||||||||||
root: path.join(process.cwd()) | ||||||||||
}); | ||||||||||
await server.listen(); | ||||||||||
server.printUrls(); | ||||||||||
|
||||||||||
const page = await browser.newPage(); | ||||||||||
page.setViewportSize({ width: 500, height: 500 }); | ||||||||||
|
||||||||||
const pages = fs.readdirSync(path.join(__dirname, "pages")); | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Use asynchronous file operations instead of synchronous ones Using synchronous file system methods like Apply this diff to refactor the code: - const pages = fs.readdirSync(path.join(__dirname, "pages"));
+ const pages = await fs.promises.readdir(path.join(__dirname, "pages"));
...
- if (fs.existsSync(path.join(__dirname, "tests", `${pageName}.ts`))) {
+ if (
+ await fs.promises
+ .access(path.join(__dirname, "tests", `${pageName}.test`))
+ .then(() => true)
+ .catch(() => false)
+ ) { Also applies to: 24-24 |
||||||||||
for (let i = 0; i < pages.length; i++) { | ||||||||||
const pageName = path.basename(pages[i], ".html"); | ||||||||||
await page.goto(`http://localhost:1237/pages/${pageName}.html`); | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Retrieve server port dynamically instead of hardcoding Hardcoding the port number ( Apply this diff to make the port dynamic: + const address = server.httpServer.address();
+ const port = typeof address === 'string' ? address : address.port;
...
|
||||||||||
if (fs.existsSync(path.join(__dirname, "tests", `${pageName}.ts`))) { | ||||||||||
const { run } = await import(`./tests/${pageName}.test`); | ||||||||||
Comment on lines
+24
to
+25
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix file extension inconsistency in test file check and import There's a discrepancy between the file extensions used when checking for the test file and when importing it. You're checking for Apply this diff to fix the inconsistency: - if (fs.existsSync(path.join(__dirname, "tests", `${pageName}.ts`))) {
- const { run } = await import(`./tests/${pageName}.test`);
+ if (fs.existsSync(path.join(__dirname, "tests", `${pageName}.test`))) {
+ const { run } = await import(`./tests/${pageName}.test`); 📝 Committable suggestion
Suggested change
|
||||||||||
if (run) run(page); | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Await 'run' function if it's asynchronous If the Apply this diff to fix the issue: - if (run) run(page);
+ if (run) await run(page); 📝 Committable suggestion
Suggested change
|
||||||||||
} | ||||||||||
} | ||||||||||
|
||||||||||
browser.close() | ||||||||||
server.close() | ||||||||||
Comment on lines
+30
to
+31
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add 'await' when closing browser and server Playwright's Apply this diff to fix the issue: + await browser.close();
+ await server.close(); 📝 Committable suggestion
Suggested change
|
||||||||||
} | ||||||||||
Comment on lines
+10
to
+32
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Add error handling and ensure resource cleanup To handle potential errors during the test execution and to ensure that the browser and server are properly closed even if an error occurs, consider wrapping your test logic in a Here's how you can refactor the code: async function runTests() {
const server = await createServer({
root: path.join(process.cwd()),
});
await server.listen();
const address = server.httpServer.address();
const port = typeof address === "string" ? address : address.port;
server.printUrls();
const browser = await playwright.chromium.launch({
headless: false,
});
try {
const page = await browser.newPage();
page.setViewportSize({ width: 500, height: 500 });
const pages = await fs.promises.readdir(path.join(__dirname, "pages"));
for (let i = 0; i < pages.length; i++) {
const pageName = path.basename(pages[i], ".html");
await page.goto(`http://localhost:${port}/pages/${pageName}.html`);
if (
await fs.promises
.access(path.join(__dirname, "tests", `${pageName}.test`))
.then(() => true)
.catch(() => false)
) {
const { run } = await import(`./tests/${pageName}.test`);
if (run) await run(page);
}
}
} catch (error) {
console.error("Error during test execution:", error);
} finally {
await browser.close();
await server.close();
}
} |
||||||||||
|
||||||||||
runTests(); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import { Page } from "playwright"; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider importing additional Playwright utilities The current import statement only brings in the Consider updating the import statement as follows: import { Page, expect, test } from "@playwright/test"; This change would allow you to use Playwright's |
||
|
||
export function run(page: Page) { | ||
page.mouse.move(250, 265); | ||
page.mouse.down(); | ||
page.mouse.move(250, 400); | ||
} | ||
Comment on lines
+1
to
+7
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider enhancing the test structure and robustness While the current implementation provides a basic framework for simulating mouse actions, there are several areas where it could be improved:
Here's a suggested refactor to address these points: import { Page, expect } from "playwright";
/**
* Simulates a vertical drag action and verifies its effect
* @param page The Playwright Page object
*/
export async function testVerticalDrag(page: Page) {
// Use more robust selectors instead of hardcoded coordinates
const dragHandle = await page.locator('.drag-handle');
const dragTarget = await page.locator('.drop-target');
// Get the bounding boxes of the elements
const handleBox = await dragHandle.boundingBox();
const targetBox = await dragTarget.boundingBox();
if (!handleBox || !targetBox) {
throw new Error("Could not locate drag elements");
}
// Perform the drag action
await page.mouse.move(handleBox.x + handleBox.width / 2, handleBox.y + handleBox.height / 2);
await page.mouse.down();
await page.mouse.move(targetBox.x + targetBox.width / 2, targetBox.y + targetBox.height / 2);
await page.mouse.up();
// Add an assertion to verify the drag action
const result = await page.locator('.drag-result').textContent();
expect(result).toBe("Drag successful");
} This refactored version addresses the issues by using more robust selectors, completing the mouse action cycle, and including an assertion. It also provides a clearer purpose through naming and comments. |
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,59 @@ | ||||||||||
import path from "path"; | ||||||||||
import fs from "fs"; | ||||||||||
import { defineConfig } from "vite"; | ||||||||||
|
||||||||||
const templateStr = fs.readFileSync(path.join(__dirname, "index.html"), "utf8"); | ||||||||||
const platforms = fs.readdirSync(path.join(__dirname, "cases")); | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Filter 'cases' directory entries to only process TypeScript files Currently, the code processes all entries in the Apply the following diff to filter the -const platforms = fs.readdirSync(path.join(__dirname, "cases"));
+const platforms = fs
+ .readdirSync(path.join(__dirname, "cases"))
+ .filter((file) => path.extname(file) === ".ts"); 📝 Committable suggestion
Suggested change
|
||||||||||
const outputDirectory = path.join(__dirname, "pages"); | ||||||||||
if (!fs.existsSync(outputDirectory)) { | ||||||||||
fs.mkdirSync(outputDirectory); | ||||||||||
} | ||||||||||
|
||||||||||
platforms.forEach((page) => { | ||||||||||
const outputCode = templateStr.replace("$$src$$", `../cases/${page}`); | ||||||||||
const basename = path.basename(page, ".ts"); | ||||||||||
fs.writeFileSync(path.join(outputDirectory, `${basename}.html`), outputCode, "utf-8"); | ||||||||||
}); | ||||||||||
|
||||||||||
export default defineConfig({ | ||||||||||
server: { | ||||||||||
host: "0.0.0.0", | ||||||||||
port: 1237 | ||||||||||
}, | ||||||||||
clearScreen: false, | ||||||||||
resolve: { | ||||||||||
dedupe: ["@galacean/engine"] | ||||||||||
}, | ||||||||||
optimizeDeps: { | ||||||||||
esbuildOptions: { | ||||||||||
target: "esnext", | ||||||||||
// Node.js global to browser globalThis | ||||||||||
define: { | ||||||||||
global: "globalThis" | ||||||||||
}, | ||||||||||
supported: { | ||||||||||
bigint: true | ||||||||||
} | ||||||||||
}, | ||||||||||
exclude: [ | ||||||||||
"@galacean/engine", | ||||||||||
"@galacean/engine-draco", | ||||||||||
"@galacean/engine-lottie", | ||||||||||
"@galacean/engine-spine", | ||||||||||
"@galacean/tools-baker", | ||||||||||
"@galacean/engine-toolkit", | ||||||||||
"@galacean/engine-toolkit-auxiliary-lines", | ||||||||||
"@galacean/engine-toolkit-controls", | ||||||||||
"@galacean/engine-toolkit-framebuffer-picker", | ||||||||||
"@galacean/engine-toolkit-gizmo", | ||||||||||
"@galacean/engine-toolkit-lines", | ||||||||||
"@galacean/engine-toolkit-outline", | ||||||||||
"@galacean/engine-toolkit-planar-shadow-material", | ||||||||||
"@galacean/engine-toolkit-skeleton-viewer", | ||||||||||
"@galacean/engine-toolkit-grid-material", | ||||||||||
"@galacean/engine-toolkit-navigation-gizmo", | ||||||||||
"@galacean/engine-toolkit-geometry-sketch", | ||||||||||
"@galacean/engine-toolkit-stats" | ||||||||||
] | ||||||||||
} | ||||||||||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,3 +3,4 @@ packages: | |
- "packages/*" | ||
# all packages in subdirs of components/ | ||
- "tests" | ||
- 'e2e' |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
|
||
import { defineProject } from "vitest/config" | ||
|
||
export default defineProject({ | ||
optimizeDeps: { | ||
exclude: [ | ||
"@galacean/engine", | ||
"@galacean/engine-loader", | ||
"@galacean/engine-rhi-webgl", | ||
"@galacean/engine-math", | ||
"@galacean/engine-core" | ||
] | ||
}, | ||
test: { | ||
browser: { | ||
provider: 'playwright', | ||
enabled: true, | ||
name: 'chromium', | ||
}, | ||
} | ||
}) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
import { defineConfig } from "vitest/config" | ||
|
||
export default defineConfig({ | ||
test: { | ||
coverage: { | ||
provider: "istanbul", | ||
reporter: ['html'] | ||
} | ||
} | ||
}) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
import { defineWorkspace } from "vitest/config" | ||
|
||
export default defineWorkspace([ | ||
"packages/*", | ||
"tests" | ||
]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Simplify position setting for
cameraEntity
You can directly set the position without creating an extra variable or redundant assignment. This makes the code cleaner.
Apply this diff to simplify the code:
📝 Committable suggestion