Skip to content

Commit f19b915

Browse files
committed
Add deno environment support
1 parent 0ab9dae commit f19b915

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

vitest.base.unit.config.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,29 @@
11
import path from "node:path";
22
import {defineConfig} from "vitest/config";
3+
import {BuiltinEnvironment} from "vitest/node";
4+
import {Environment} from "vitest/environments";
35
const __dirname = new URL(".", import.meta.url).pathname;
6+
import denoEnvironment from "./vitest/environments/deno";
7+
8+
function getTestEnvironment(
9+
runtime?: string
10+
): BuiltinEnvironment | Environment {
11+
switch (runtime) {
12+
case "deno":
13+
return denoEnvironment;
14+
case "node":
15+
return "node";
16+
default: {
17+
if (runtime) {
18+
throw new Error(`Unsupported JS Runtime '${runtime}'`);
19+
} else {
20+
throw new Error(
21+
"Please define `JS_RUNTIME` env variable to either node | deno"
22+
);
23+
}
24+
}
25+
}
26+
}
427

528
export default defineConfig({
629
test: {
@@ -23,5 +46,6 @@ export default defineConfig({
2346
"hanging-process",
2447
],
2548
onConsoleLog: () => !process.env.TEST_QUIET_CONSOLE,
49+
environment: getTestEnvironment(process.env.JS_RUNTIME),
2650
},
2751
});

vitest/environments/deno.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import type {Environment} from "vitest/environments";
2+
3+
export default <Environment>{
4+
name: "deno",
5+
transformMode: "ssr",
6+
async setupVM() {
7+
// @ts-expect-error - Ignore the global object
8+
if (!global.Deno) {
9+
throw new Error("Not valid deno runtime available");
10+
}
11+
12+
// Deno supports `node:vm` module.
13+
const vm = await import("node:vm");
14+
const context = vm.createContext();
15+
return {
16+
getVmContext() {
17+
return context;
18+
},
19+
teardown() {
20+
// called after all tests with this env have been run
21+
},
22+
};
23+
},
24+
setup() {
25+
// custom setup
26+
return {
27+
teardown() {
28+
// called after all tests with this env have been run
29+
},
30+
};
31+
},
32+
};

0 commit comments

Comments
 (0)