jellytau/wdio.conf.ts

90 lines
2.6 KiB
TypeScript

import os from "node:os";
import path from "node:path";
import { spawn, type ChildProcess } from "node:child_process";
import fs from "node:fs";
let tauriDriver: ChildProcess;
export const config: WebdriverIO.Config = {
specs: ["./e2e/specs/**/*.e2e.ts"],
exclude: [],
// Run tests sequentially to avoid session conflicts
maxInstances: 1,
port: 4444, // tauri-driver default port
hostname: "localhost",
capabilities: [
{
maxInstances: 1,
"tauri:options": {
application: getTauriApplicationPath(),
// Use a separate test data directory
env: {
JELLYTAU_DATA_DIR: path.join(os.tmpdir(), "jellytau-test-data"),
},
},
} as WebdriverIO.Capabilities,
],
logLevel: "warn", // Reduce log noise
bail: 0,
waitforTimeout: 10000,
connectionRetryTimeout: 120000,
connectionRetryCount: 3,
framework: "mocha",
reporters: ["spec"],
mochaOpts: {
ui: "bdd",
timeout: 60000,
},
// Start tauri-driver before session
onPrepare: async function () {
tauriDriver = spawn(
path.resolve(os.homedir(), ".cargo", "bin", "tauri-driver"),
[],
{ stdio: [null, process.stdout, process.stderr] }
);
return new Promise((resolve) => {
setTimeout(resolve, 1000); // Give tauri-driver time to start
});
},
// Clean up tauri-driver after session
onComplete: async function () {
tauriDriver.kill();
},
};
function getTauriApplicationPath(): string {
const platform = process.platform;
const cwd = process.cwd();
// Check for release build first, fallback to debug
if (platform === "win32") {
const releasePath = path.join(cwd, "src-tauri/target/release/jellytau.exe");
const debugPath = path.join(cwd, "src-tauri/target/debug/jellytau.exe");
if (fs.existsSync(releasePath)) return releasePath;
if (fs.existsSync(debugPath)) return debugPath;
return releasePath; // Return default if neither exists
} else if (platform === "darwin") {
const releasePath = path.join(cwd, "src-tauri/target/release/bundle/macos/jellytau.app");
const debugPath = path.join(cwd, "src-tauri/target/debug/bundle/macos/jellytau.app");
if (fs.existsSync(releasePath)) return releasePath;
if (fs.existsSync(debugPath)) return debugPath;
return releasePath;
} else {
// Linux
const releasePath = path.join(cwd, "src-tauri/target/release/jellytau");
const debugPath = path.join(cwd, "src-tauri/target/debug/jellytau");
if (fs.existsSync(releasePath)) return releasePath;
if (fs.existsSync(debugPath)) return debugPath;
return debugPath; // Return debug path as default for Linux
}
}