aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/packages/create-turbo/__tests__/index.test.ts
diff options
context:
space:
mode:
author简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:44 +0800
committer简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:44 +0800
commitdd84b9d64fb98746a230cd24233ff50a562c39c9 (patch)
treeb583261ef00b3afe72ec4d6dacb31e57779a6faf /packages/create-turbo/__tests__/index.test.ts
parent0b46fcd72ac34382387b2bcf9095233efbcc52f4 (diff)
downloadHydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.tar.gz
HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.zip
Diffstat (limited to 'packages/create-turbo/__tests__/index.test.ts')
-rw-r--r--packages/create-turbo/__tests__/index.test.ts90
1 files changed, 90 insertions, 0 deletions
diff --git a/packages/create-turbo/__tests__/index.test.ts b/packages/create-turbo/__tests__/index.test.ts
new file mode 100644
index 0000000..641b193
--- /dev/null
+++ b/packages/create-turbo/__tests__/index.test.ts
@@ -0,0 +1,90 @@
+import path from "path";
+import chalk from "chalk";
+import childProcess from "child_process";
+import { setupTestFixtures, spyConsole } from "@turbo/test-utils";
+import { create } from "../src/commands/create";
+import type { CreateCommandArgument } from "../src/commands/create/types";
+import { turboGradient } from "../src/logger";
+import type { PackageManager } from "@turbo/workspaces";
+
+// imports for mocks
+import * as createProject from "../src/commands/create/createProject";
+import * as turboWorkspaces from "@turbo/workspaces";
+import { getWorkspaceDetailsMockReturnValue } from "./test-utils";
+
+jest.mock("@turbo/workspaces", () => ({
+ __esModule: true,
+ ...jest.requireActual("@turbo/workspaces"),
+}));
+
+describe("create-turbo", () => {
+ const { useFixture } = setupTestFixtures({
+ directory: path.join(__dirname, "../"),
+ });
+
+ const mockConsole = spyConsole();
+
+ test.each<{ packageManager: PackageManager }>([
+ { packageManager: "yarn" },
+ { packageManager: "npm" },
+ { packageManager: "pnpm" },
+ ])(
+ "outputs expected console messages when using $packageManager",
+ async ({ packageManager }) => {
+ const { root } = useFixture({ fixture: `create-turbo` });
+
+ const availableScripts = ["build", "test", "dev"];
+
+ const mockCreateProject = jest
+ .spyOn(createProject, "createProject")
+ .mockResolvedValue({
+ cdPath: "",
+ hasPackageJson: true,
+ availableScripts,
+ });
+
+ const mockGetWorkspaceDetails = jest
+ .spyOn(turboWorkspaces, "getWorkspaceDetails")
+ .mockResolvedValue(
+ getWorkspaceDetailsMockReturnValue({
+ root,
+ packageManager,
+ })
+ );
+
+ const mockExecSync = jest
+ .spyOn(childProcess, "execSync")
+ .mockImplementation(() => {
+ return "success";
+ });
+
+ await create(
+ root as CreateCommandArgument,
+ packageManager as CreateCommandArgument,
+ {
+ skipInstall: true,
+ example: "default",
+ }
+ );
+
+ const expected = `${chalk.bold(
+ turboGradient(">>> Success!")
+ )} Created a new Turborepo at "${path.relative(process.cwd(), root)}".`;
+
+ expect(mockConsole.log).toHaveBeenCalledWith(expected);
+ expect(mockConsole.log).toHaveBeenCalledWith(
+ "Inside that directory, you can run several commands:"
+ );
+
+ availableScripts.forEach((script) => {
+ expect(mockConsole.log).toHaveBeenCalledWith(
+ chalk.cyan(` ${packageManager} run ${script}`)
+ );
+ });
+
+ mockCreateProject.mockRestore();
+ mockGetWorkspaceDetails.mockRestore();
+ mockExecSync.mockRestore();
+ }
+ );
+});