UNPKG

arkit

Version:

Visualises JavaScript, TypeScript and Flow codebases as meaningful and committable architecture diagrams

128 lines (101 loc) 3.51 kB
import { execSync } from "child_process"; import * as path from "path"; import * as fs from "fs"; jest.setTimeout(60000); describe("CLI", () => { const arkit = path.resolve(__dirname, "../index.js"); const exec = (command: string): string => { return execSync(command) .toString() .split(__dirname) .join("__dirname"); }; describe("Options", () => { test("should output help", () => { expect(exec(`${arkit} -h`)).toMatchSnapshot(); }); }); describe("Arkit", () => { describe("package.json", () => { const svgPath = path.resolve(__dirname, "../dist/arkit.svg"); const pngPath = path.resolve(__dirname, "../dist/arkit.png"); beforeAll(() => { if (fs.existsSync(svgPath)) fs.unlinkSync(svgPath); if (fs.existsSync(pngPath)) fs.unlinkSync(pngPath); exec(`npm run architecture`); }); test("should generate correct png", () => { const stat = fs.statSync(pngPath); expect({ blksize: stat.blksize, blocks: stat.blocks, size: stat.size }).toMatchSnapshot(); }); test("should generate correct svg", () => { expect(fs.readFileSync(svgPath).toString()).toMatchSnapshot(); }); }); }); describe("Sample", () => { describe("no args", () => { const dir = path.resolve(__dirname, "./sample"); const pumlPath = path.resolve(dir, "./docs/architecture.puml"); const svgPath = path.resolve(dir, "./docs/architecture.svg"); beforeAll(() => { if (fs.existsSync(pumlPath)) fs.unlinkSync(pumlPath); if (fs.existsSync(svgPath)) fs.unlinkSync(svgPath); process.chdir(dir); exec(arkit); }); test("should generate correct puml", () => { expect(fs.readFileSync(pumlPath).toString()).toMatchSnapshot(); }); test("should generate correct svg", () => { expect(fs.readFileSync(svgPath).toString()).toMatchSnapshot(); }); }); }); describe("Angular2 Todo", () => { describe("no args", () => { test("should output correct svg", () => { const dir = path.resolve(__dirname, "./angular2_es2015"); process.chdir(dir); expect(exec(arkit)).toMatchSnapshot(); }); }); describe("exclude and puml", () => { test("should output correct puml", () => { const dir = path.resolve(__dirname, "./angular2_es2015"); process.chdir(dir); expect( exec(`${arkit} -o puml -e "app/components/**"`) ).toMatchSnapshot(); }); }); }); describe("Express", () => { describe("no args", () => { test("should output correct svg", () => { const dir = path.resolve(__dirname, "./express"); const svgPath = path.resolve(dir, "./express.svg"); if (fs.existsSync(svgPath)) fs.unlinkSync(svgPath); process.chdir(dir); exec(arkit); expect(fs.readFileSync(svgPath).toString()).toMatchSnapshot(); }); }); }); describe("ReactDOM", () => { describe("config path", () => { test("should output correct svg", () => { const dir = path.resolve(__dirname, "./react-dom"); const svgPath = path.resolve(dir, "./arkit.svg"); if (fs.existsSync(svgPath)) fs.unlinkSync(svgPath); process.chdir(dir); exec(`${arkit} -c react-arkit.json`); expect(fs.readFileSync(svgPath).toString()).toMatchSnapshot(); }); }); }); });