Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 0 additions & 51 deletions src/runner/browser-env/index.ts

This file was deleted.

21 changes: 21 additions & 0 deletions src/runner/browser-env/vite/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ import { plugin as generateIndexHtml } from "./plugins/generate-index-html";
import { plugin as mockPlugin } from "./plugins/mock";
import { ManualMock } from "./manual-mock";
import { Config } from "../../../config";
import RuntimeConfig from "../../../config/runtime-config";
import { VITE_DEFAULT_CONFIG_ENV } from "./constants";
import defaults from "../../../config/defaults";

import type { ViteDevServer, UserConfig, InlineConfig } from "vite";
import type { BrowserTestRunEnvOptions } from "./types";
Expand Down Expand Up @@ -76,6 +78,8 @@ export class ViteServer {

await this._server.listen();

this._useBaseUrlFromVite();
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

moved here from src/runner/browser-env/index.ts (which is not needed anymore)


logger.log(chalk.green(`Vite server started on ${this.baseUrl}`));
}

Expand Down Expand Up @@ -115,4 +119,21 @@ export class ViteServer {
get baseUrl(): string | undefined {
return this._server?.resolvedUrls!.local[0];
}

private _useBaseUrlFromVite(): void {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also moved from src/runner/browser-env/index.ts

const viteBaseUrl = this.baseUrl!;
const defaultBaseUrl = defaults.baseUrl;

RuntimeConfig.getInstance().extend({ viteBaseUrl });

if (this._testplaneConfig.baseUrl === defaultBaseUrl) {
this._testplaneConfig.baseUrl = viteBaseUrl;
}

for (const broConfig of Object.values(this._testplaneConfig.browsers)) {
if (broConfig.baseUrl === defaultBaseUrl) {
broConfig.baseUrl = viteBaseUrl;
}
}
}
}
25 changes: 19 additions & 6 deletions src/testplane.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import _ from "lodash";
import fs from "fs-extra";
import { Stats as RunnerStats } from "./stats";
import { BaseTestplane } from "./base-testplane";
import type { MainRunner as NodejsEnvRunner } from "./runner";
import type { MainRunner as BrowserEnvRunner } from "./runner/browser-env";
import type { MainRunner } from "./runner";
import RuntimeConfig from "./config/runtime-config";
import { MasterAsyncEvents, MasterEvents, MasterSyncEvents } from "./events";
import eventsUtils from "./events/utils";
Expand All @@ -19,6 +18,7 @@ import { initDevServer } from "./dev-server";
import { ConfigInput } from "./config/types";
import { MasterEventHandler, Test, TestResult } from "./types";
import { preloadWebdriverIO } from "./utils/preload-utils";
import { ViteServer } from "./runner/browser-env/vite/server";

interface RunOpts {
browsers: string[];
Expand Down Expand Up @@ -70,14 +70,16 @@ export interface Testplane {
export class Testplane extends BaseTestplane {
protected failed: boolean;
protected failedList: FailedListItem[];
protected runner: NodejsEnvRunner | BrowserEnvRunner | null;
protected runner: MainRunner | null;
protected viteServer: ViteServer | null;

constructor(config?: string | ConfigInput) {
super(config);

this.failed = false;
this.failedList = [];
this.runner = null;
this.viteServer = null;
}

extendCli(parser: Command): void {
Expand All @@ -91,6 +93,15 @@ export class Testplane extends BaseTestplane {
configPath: this._config.configPath,
});

if (!isRunInNodeJsEnv(this._config)) {
try {
this.viteServer = ViteServer.create(this._config);
await this.viteServer.start();
} catch (err) {
throw new Error(`Vite server failed to start: ${(err as Error).message}`);
}
}

return super._init();
}

Expand Down Expand Up @@ -126,9 +137,7 @@ export class Testplane extends BaseTestplane {
this._config.system.mochaOpts.timeout = 0;
}

const RunnerClass = isRunInNodeJsEnv(this._config)
? await import("./runner").then(m => m.MainRunner)
: await import("./runner/browser-env").then(m => m.MainRunner);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

browser-env runner is not needed anymore, I removed it

const RunnerClass = await import("./runner").then(m => m.MainRunner);

const runner = RunnerClass.create(this._config, this._interceptors);
this.runner = runner;
Expand Down Expand Up @@ -257,6 +266,10 @@ export class Testplane extends BaseTestplane {
}, timeout).unref();
}

if (this.viteServer) {
this.viteServer.close();
}

if (this.runner) {
this.runner.cancel();
}
Expand Down
5 changes: 2 additions & 3 deletions src/types/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import type { Events } from "../events";
import type { MainRunner as NodejsEnvRunner } from "../runner";
import type { MainRunner as BrowserEnvRunner } from "../runner/browser-env/index";
import type { MainRunner } from "../runner";
import type { TestCollection } from "../test-collection";
import type { Test } from "../test-reader/test-object/test";
import type { Suite } from "../test-reader/test-object/suite";
Expand Down Expand Up @@ -219,7 +218,7 @@ export interface SnapshotsData {

export type MasterEventHandler<T extends BaseTestplane> = {
(event: Events["INIT"], callback: () => Promise<void> | void): T;
(event: Events["RUNNER_START"], callback: (runner: NodejsEnvRunner | BrowserEnvRunner) => Promise<void> | void): T;
(event: Events["RUNNER_START"], callback: (runner: MainRunner) => Promise<void> | void): T;
(event: Events["RUNNER_END"], callback: (result: StatsResult) => Promise<void> | void): T;
(event: Events["SESSION_START"], callback: AsyncSessionEventCallback): T;
(event: Events["SESSION_END"], callback: AsyncSessionEventCallback): T;
Expand Down
112 changes: 0 additions & 112 deletions test/src/runner/browser-env/index.ts

This file was deleted.

45 changes: 44 additions & 1 deletion test/src/runner/browser-env/vite/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ import { ViteServer } from "../../../../../src/runner/browser-env/vite/server";
import { ManualMock } from "../../../../../src/runner/browser-env/vite/manual-mock";
import { makeConfigStub } from "../../../../utils";
import { BROWSER_TEST_RUN_ENV } from "../../../../../src/constants/config";
import defaults from "../../../../../src/config/defaults";
import { promiseDelay } from "../../../../../src/utils/promise";
import RuntimeConfig from "../../../../../src/config/runtime-config";

import type { Config } from "../../../../../src/config";
import type { BrowserTestRunEnvOptions } from "../../../../../src/runner/browser-env/vite/types";
import { promiseDelay } from "../../../../../src/utils/promise";

describe("runner/browser-env/vite/server", () => {
const sandbox = sinon.createSandbox();
Expand Down Expand Up @@ -54,6 +56,8 @@ describe("runner/browser-env/vite/server", () => {
mockPlugin = sandbox.stub().returns([{ name: "default-plugin-2" }]);
sandbox.stub(ManualMock, "create").resolves(sinon.stub() as unknown as ManualMock);

sandbox.stub(RuntimeConfig, "getInstance").returns({ extend: sandbox.stub() });

({ ViteServer: ViteServerStub } = proxyquire("../../../../../src/runner/browser-env/vite/server", {
"get-port": getPortStub,
"./socket": { createSocketServer },
Expand Down Expand Up @@ -222,6 +226,45 @@ describe("runner/browser-env/vite/server", () => {
assert.callOrder(createSocketServer, viteServer.listen as SinonStub);
});

it("should save vite base url to runtime config", async () => {
const viteBaseUrl = "http://localhost:4444";
const viteServer = mkViteServer_({
resolvedUrls: {
local: [viteBaseUrl],
network: [],
},
});
(Vite.createServer as SinonStub).resolves(viteServer);

await ViteServerStub.create(mkConfig_()).start();

assert.calledWith((RuntimeConfig.getInstance as SinonStub).lastCall.returnValue.extend, {
viteBaseUrl,
});
});

it("should use base url from vite", async () => {
const viteBaseUrl = "http://localhost:4444";
const viteServer = mkViteServer_({
resolvedUrls: {
local: [viteBaseUrl],
network: [],
},
});
(Vite.createServer as SinonStub).resolves(viteServer);

const config = makeConfigStub({
baseUrl: defaults.baseUrl,
browsers: ["b1", "b2"],
}) as Config;

await ViteServerStub.create(config).start();

assert.equal(config.baseUrl, viteBaseUrl);
assert.equal(config.browsers.b1.baseUrl, viteBaseUrl);
assert.equal(config.browsers.b2.baseUrl, viteBaseUrl);
});

it("should inform on which address vite server started", async () => {
const viteServer = mkViteServer_({
resolvedUrls: {
Expand Down
Loading
Loading