-
-
Notifications
You must be signed in to change notification settings - Fork 10.5k
/
Copy pathvite-dotenv-test.ts
120 lines (99 loc) · 3.65 KB
/
vite-dotenv-test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import { test, expect } from "@playwright/test";
import getPort from "get-port";
import {
createProject,
customDev,
EXPRESS_SERVER,
viteConfig,
} from "./helpers/vite.js";
let getFiles = async ({ envDir, port }: { envDir?: string; port: number }) => {
let envPath = `${envDir ? `${envDir}/` : ""}.env`;
return {
"vite.config.js": await viteConfig.basic({ port, envDir }),
"server.mjs": EXPRESS_SERVER({ port }),
[envPath]: `
ENV_VAR_FROM_DOTENV_FILE=Content from ${envPath} file
`,
"app/routes/dotenv.tsx": String.raw`
import { useState, useEffect } from "react";
import { useLoaderData } from "react-router";
export const loader = () => {
return {
loaderContent: process.env.ENV_VAR_FROM_DOTENV_FILE,
}
}
export default function DotenvRoute() {
const { loaderContent } = useLoaderData();
const [clientContent, setClientContent] = useState('');
useEffect(() => {
try {
setClientContent("process.env.ENV_VAR_FROM_DOTENV_FILE shouldn't be available on the client, found: " + process.env.ENV_VAR_FROM_DOTENV_FILE);
} catch (err) {
setClientContent("process.env.ENV_VAR_FROM_DOTENV_FILE not available on the client, which is a good thing");
}
}, []);
return <>
<div data-dotenv-route-loader-content>{loaderContent}</div>
<div data-dotenv-route-client-content>{clientContent}</div>
</>
}
`,
};
};
test.describe("Vite .env", () => {
test.describe("defaults", async () => {
let port: number;
let cwd: string;
let stop: () => void;
test.beforeAll(async () => {
port = await getPort();
cwd = await createProject(await getFiles({ port }));
stop = await customDev({ cwd, port });
});
test.afterAll(() => stop());
test("express", async ({ page }) => {
let pageErrors: unknown[] = [];
page.on("pageerror", (error) => pageErrors.push(error));
await page.goto(`http://localhost:${port}/dotenv`, {
waitUntil: "networkidle",
});
expect(pageErrors).toEqual([]);
let loaderContent = page.locator("[data-dotenv-route-loader-content]");
await expect(loaderContent).toHaveText("Content from .env file");
let clientContent = page.locator("[data-dotenv-route-client-content]");
await expect(clientContent).toHaveText(
"process.env.ENV_VAR_FROM_DOTENV_FILE not available on the client, which is a good thing"
);
expect(pageErrors).toEqual([]);
});
});
test.describe("custom env dir", async () => {
let port: number;
let cwd: string;
let stop: () => void;
test.beforeAll(async () => {
const envDir = "custom-env-dir";
port = await getPort();
cwd = await createProject(await getFiles({ envDir, port }));
stop = await customDev({ cwd, port });
});
test.afterAll(() => stop());
test("express", async ({ page }) => {
let pageErrors: unknown[] = [];
page.on("pageerror", (error) => pageErrors.push(error));
await page.goto(`http://localhost:${port}/dotenv`, {
waitUntil: "networkidle",
});
expect(pageErrors).toEqual([]);
let loaderContent = page.locator("[data-dotenv-route-loader-content]");
await expect(loaderContent).toHaveText(
"Content from custom-env-dir/.env file"
);
let clientContent = page.locator("[data-dotenv-route-client-content]");
await expect(clientContent).toHaveText(
"process.env.ENV_VAR_FROM_DOTENV_FILE not available on the client, which is a good thing"
);
expect(pageErrors).toEqual([]);
});
});
});