UNPKG

@bemedev/cli-test

Version:

A library for testing CLI libraries (INCEPTION !!)

174 lines (132 loc) 3.75 kB
# A library to test cli library (INCEPTION !!) ## Install npm ```bash npm i @bemedev/cli-test ``` yarn ```bash yarn add @bemedev/cli-test ``` pnpm ```bash pnpm add @bemedev/cli-test ``` ## Usage - Describe ```ts import { describe_cli } from '@bemedev/cli-test'; describe_cli('', ({ makeDir, writeFile, readFile, ls, mockFs }) => { test('#0 => No files', async () => { const files = await ls(); expect(files).toEqual([]); }); mockFs('writeFile'); test('#1 => Create a folder "test"', async () => { return makeDir('test'); }); test('#2 => The folder "test" should be created', async () => { const files = await ls(); expect(files).toEqual(['test']); }); test('#3 => Create a file "test/test.txt"', async () => { return writeFile('test/test.txt', 'test'); }); test('#4 => The file "test/test.txt" should be created', async () => { const files1 = await ls(); expect(files1).toEqual(['test']); const files2 = await ls('test'); expect(files2).toEqual(['test.txt']); }); test('#5 => Read the file "test/test.txt"', async () => { const content = await readFile('test/test.txt'); expect(content).toEqual('test'); }); }); ``` ### Todo and Skip ```ts import { describe_cli } from '@bemedev/cli-test'; describe_cli.todo('', () => {}); describe_cli.skip('', () => {}); ``` ### RunIf ```ts import { describe_cli } from '@bemedev/cli-test'; describe_cli.runIf(true)( '', ({ makeDir, writeFile, readFile, ls, mockFs }) => { test('#0 => No files', async () => { const files = await ls(); expect(files).toEqual([]); }); mockFs('writeFile'); test('#1 => Create a folder "test"', async () => { return makeDir('test'); }); test('#2 => The folder "test" should be created', async () => { const files = await ls(); expect(files).toEqual(['test']); }); test('#3 => Create a file "test/test.txt"', async () => { return writeFile('test/test.txt', 'test'); }); test('#4 => The file "test/test.txt" should be created', async () => { const files1 = await ls(); expect(files1).toEqual(['test']); const files2 = await ls('test'); expect(files2).toEqual(['test.txt']); }); test('#5 => Read the file "test/test.txt"', async () => { const content = await readFile('test/test.txt'); expect(content).toEqual('test'); }); }, ); ``` ### And so on... ## Add on To mock fs libraries, we have a cli that create a setup file for your vites config. You need to add an custom extension to your vite config "setupFs". Incide your vitest.config.ts, example : ```ts /** Here */ import { setupFs } from '@bemedev/cli-test/lib/extension'; import { aliasTs } from '@bemedev/vitest-alias'; import { exclude } from '@bemedev/vitest-cov-exclude'; import { defaultExclude, defineConfig } from 'vitest/config'; import tsconfig from './tsconfig.json'; export default defineConfig({ plugins: [ aliasTs(tsconfig as any), exclude( './src/cli/**/*', '**/index.ts', './src/helpers/partialMock.ts', ), /** Here */ setupFs(), ], test: { bail: 10, maxConcurrency: 10, passWithNoTests: true, slowTestThreshold: 3000, exclude: [ ...defaultExclude, './src/cli/cli.pre.test.ts', './src/cli/cli.post.test.ts', ], coverage: { enabled: true, extension: 'ts', reportsDirectory: '.coverage', all: true, provider: 'v8', }, }, }); ``` ## N.B Now our describe function is a ffully vitest compatible function, so you can use it with all vitest features. ## N.B In order to function, you need to add a peer dependencies : "_cmd-ts_" and eventually "_vitest_".