0.1.6 • Published 1 year ago

@bemedev/cli-test v0.1.6

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

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".

0.1.6

1 year ago

0.1.5

1 year ago

0.1.3

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago

0.1.0

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago