@bemedev/cli-test
v0.1.6
Published
A library for testing CLI libraries (INCEPTION !!)
Downloads
1
Readme
A library to test cli library (INCEPTION !!)
Install
npm
npm i @bemedev/cli-test
yarn
yarn add @bemedev/cli-test
pnpm
pnpm add @bemedev/cli-test
Usage - Describe
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
import { describe_cli } from '@bemedev/cli-test';
describe_cli.todo('', () => {});
describe_cli.skip('', () => {});
RunIf
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 :
/** 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".